C - 指向一个角色

时间:2018-04-27 16:19:00

标签: 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, &cPtr2);

问题在于,每次我运行它时,它都会存储一个不同的角色,并始终指向' 41'。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您对传递给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);

https://developer.jboss.org/wiki/MysteriousShutdowns

如您所见,cPtr1cPtr2都指向同一个字符。而且,两个指针是相同的。然而,指针本身在内存中占据不同的位置。

更改说明:

  • 您需要取消引用指针*cPtr1以使用%c
  • 进行打印
  • 您需要使用%p来打印指针
  • 打印指针时,需要将参数强制转换为(void*)

答案 1 :(得分:0)

问题是您在“存储:”

之后打印地址
ch = 'A';
cPtr* = &ch;
printf("%x",cPtr); // Printing the pointer value(the address of the stored char).
printf("%c",*cPtr); // Printing the value which the pointer points to(dereferencing).
printf("%x",&cPtr); // Printing the address of the pointer itself.