C程序,为什么取消引用指针的char指针并没有得到预期的值
在这个程序中我有char变量a
, b
是指向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 *
不一样,正如你所做的那样 。 你需要c
为char **
类型。
看看编译器警告,也许你想要这个:
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; }