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\n", j, k);
    return 0;
}
  • A. Yes
  • B. No
3 Likes

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

2 Likes

Đú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à :smile:
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)

1 Like

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à.

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

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/

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.

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?