Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-指向一个字符_C - Fatal编程技术网

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*)

printf的参数顺序不正确
*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);