30/09/2018, 16:02

Poll: Kiểm tra kiến thức C - 1.7

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/11

Will the program compile in Turbo C?

#include<stdio.h>
int main()
{
    int a=10, *j;
    void *k;
    j=k=&a;
    j++;
    k++;
    printf("%u %u
", j, k);
    return 0;
}
  • A. Yes
  • B. No
Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

Không có Turbo C, không biết làm

Le Anh Dung viết 18:16 ngày 30/09/2018

Đúng là không rõ trên turbo C chạy dc hay ko.
Nhưng trên C thuần thì mình nghĩ vẫn chạy bình thường.
Chỉ có điều là do j,k là con trỏ cho nên dòng printf nên để là
printf("%p %p\n", j, k); sẽ hay hơn.
(Ref:http://stackoverflow.com/questions/16726105/why-cant-we-use-d-in-c-language-instead-of-u-with-pointers)

Le Dong Thuc viết 18:18 ngày 30/09/2018

Chắc là chạy bình thường thôi chứ nhỉ. Chỉ là print ra địa chỉ vùng nhớ thôi mà.

Giang Tran viết 18:08 ngày 30/09/2018

k++; ==> k là void pointer nên không có ++ được.

Le Dong Thuc viết 18:12 ngày 30/09/2018

Hi @Giang_Tran

Ban đầu, k đúng là void pointer. Nhưng khi chạy tới dòng j=k=&a;, lúc này k trở thành int pointer.

Trích: http://www.c4learn.com/c-programming/c-void-pointers/

... viết 18:14 ngày 30/09/2018

Em nghĩ C trong Turbo C nó ngu ngu, nên khi gán j = k thì cần phải ép kiểu cho nó chứ không gán trực tiếp được. Đoán là không compile được.

Thu Thuỷ viết 18:16 ngày 30/09/2018

j = k = &a <=> int* = void* = &a
===========> YES

Bài liên quan
0