C-指向一个字符
我试图让一个指针指向一个字符,然后另一个指针指向第一个指针,使它们都存储相同的值C-指向一个字符,c,C,我试图让一个指针指向一个字符,然后另一个指针指向第一个指针,使它们都存储相同的值 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
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*)
*cPtr1
将为您提供cPtr1
指向的字符,而cPtr1
将为您提供指向的地址。该死,谢谢。这意味着,*Pointer=Value Pointer=Address&Pointer=PointerYup的地址,您已经知道了。使用%p而不是%x有什么区别?@VallyMan%p
与打印地址的标准兼容<代码>%x不是,即使它经常工作。
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);