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, &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);

Demo.

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

变化说明:

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

关于C - 指向一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066547/

相关文章:

c - 关于指针的奇怪的事情

c - 从 log1pf() 计算 asinhf() 的最准确方法?

c - 为什么 minizip 不归档大文件(大于 4 GB)

c - 如何将随机散列减少为 bool 值

c# - 如何知道 Windows 中是否正在访问设备?

c - 我不能在 C 中操作位字段

c - int加uint的返回值是多少?

c - 在 C 的条件语句中使用数组元素时出错

c - 如何在链表中获取两个集合的公共(public)元素?

c - 在C中检测文件系统