C程序,为什么取消引用指针的char指针并没有得到预期的值

在这个程序中我有char变量ab是指向b的指针, c是指向b的指针。 而*a=b*c不等于b 。 我不明白为什么,谁能解释一下?

另一件事我不明白我如果将变量从char更改为int ,则取消引用c b值。 *c等于b 。但如果变量是char类型,则不是。

 #include #include int main() { char a = "a" ; char *b; b = &a; printf("%d\n", b); printf("%d\n\n", &a); printf("Deference b* hold value: %d\n", *b); printf("a hold value: %d\n\n", a); char *c; c = &b; printf("%d\n", c); printf("%d\n\n", &b); printf("Deference *c hold value: %d\n", *c); printf("b hold value: %d\n\n", b);// why *c not equal b return 0; } 

首先,

  char a = "a" ; 

是非法的,你实际上是在尝试将指针存储到char 。 你需要的是什么

 char a = 'a' ; 

然后,说

 printf("%d\n", b); printf("%d\n\n", &a); //and all later pointer related prints.... 

因为您将错误类型的参数传递给%d会导致未定义的行为 。 要打印指针,您需要

  • 使用%p格式说明符。
  • 将论证转为void*

之后,

 char *c; c = &b; 

也是错误的,请参阅数据类型。 &b是指向char指针。 这与char *不一样,正如你所做的那样 。 你需要cchar **类型。

看看编译器警告,也许你想要这个:

 int main() { char *a = "a"; char *b; b = a; printf("%p\n", b); printf("%p\n\n", &a); printf("Deference b* hold value: %d\n", *b); printf("a hold value: %p\n\n", a); char *c; c = b; printf("%p\n", c); printf("%p\n\n", &b); printf("Deference *c hold value: %d\n", *c); printf("b hold value: %p\n\n", b);// why *c not equal b return 0; }