Tôi có ứng dụng thử nghiệm sau đây:Tại sao char * được xử lý giống như char ** trong C?
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void){
char buf[512];
buf[0]= 0x1;
buf[1]= 0x2;
char *temp1 = &buf;
char *temp2 = buf;
char *temp3 = &buf[0];
printf("temp1:%p, temp2:%p, temp3:%p\n",temp1,temp2,temp3);
printf("0 = %d, %d, %d\n",temp1[0],temp2[0],temp3[0]);
printf("1 = %d, %d, %d\n",temp1[1],temp2[1],temp3[1]);
return;
}
Nó biên dịch với một cảnh báo:
Nhưng khi tôi chạy nó, cả ba con trỏ cư xử như vậy.
./testptr
temp1:0x7fff3a85f220, temp2:0x7fff3a85f220, temp3:0x7fff3a85f220
0 = 1, 1, 1
1 = 2, 2, 2
Tôi biết rằng buf == &buf[0]
, nhưng tại sao &buf == &buf[0]
? Không nên &buf
là char**
?
'& buf' thực sự là một' char (*) [512] '(một con trỏ đến một mảng' char' 512 mục). Chúng không hoàn toàn giống nhau. –
Bạn đã thay đổi mã của mình giữa việc bắt đầu trình biên dịch và dán mã vào câu hỏi. Vấn đề là trên dòng 9 bây giờ. –
Xin lỗi bạn đúng, chỉ cần thêm một dòng mới – austinmarton