我试图让一个指针指向一个字符,然后另一个指针指向第一个指针,使它们都存储相同的值。
char ch = 'A';
char *cPtr1, *cPtr2;
cPtr1 = &ch;
cPtr2 = cPtr1;
printf("cPtr1 Stored:%c Point:%x Memory:%x\n", cPtr1, *cPtr1, &cPtr1);
printf("cPtr2 Stored:%c Point:%x Memory:%x\n", cPtr2, *cPtr2, &cPtr2);
问题是每次我运行它时,它都会存储一个不同的字符并始终指向“41”。我做错了什么?
最佳答案
您对传递给 printf
的内容有点混淆。这是您要查找的内容:
printf("cPtr1 Stored:'%c' Point:%p Memory:%p\n", *cPtr1, (void*)cPtr1, (void*)&cPtr1);
printf("cPtr2 Stored:'%c' Point:%p Memory:%p\n", *cPtr2, (void*)cPtr2, (void*)&cPtr2);
如您所见,cPtr1
和 cPtr2
都指向同一个字符。而且,这两个指针是相同的。然而,指针本身在内存中占据不同的位置。
变化说明:
- 您需要取消引用指针
*cPtr1
以使用%c
打印 - 你需要使用
%p
来打印一个指针 - 打印指针时,需要将参数转换为
(void*)
。
关于C - 指向一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066547/