我输入了以下代码:
char *a;
char b = 'd';
a = b;
printf("%c", a);
输出 - 'd'。
我的查询是,因为a
是指针变量,所以它应该存储地址。为什么在这种情况下存储字符值?
答案 0 :(得分:7)
因为
a
是指针变量,所以它应该存储地址
指针变量也可以存储数值。在大多数系统上,指针变量可以存储int
,尽管没有明确的保证。但是,指针变量能够在所有系统上存储类型char
的值。
那么为什么在这种情况下存储字符值?
因为你告诉它这样做。在指针中存储值不会使该值成为地址。
注意:您的代码有未定义的行为。代码生成您期望的输出的原因是系统上的指针表示恰好与int
的指针表示兼容,这是%c
所期望的。
答案 1 :(得分:0)
指针是一个存储另一个变量的地址的变量。但是在这里你写了一个= b,这意味着你提供了一个存储的字符d。这是因为指针也是一个变量。它是也有自己的地址空间。我们提供另一个变量的地址,指针存储该地址,这意味着指针具有存储容量。但是在这个程序中你不能取消引用指针。你会得到分段错误。
答案 2 :(得分:0)
在用C引用时,指针变量存储它指向的变量的地址。 在C中,我们不能像任何其他普通变量一样使用它来存储其他类型的数据。此外,指针变量的数据类型是指向的变量,或者如果我们将其声明为void,我们需要将其转换为根据需要(即指向变量的数据类型)。
在讨论你的查询时,因为你已经将它声明为"指针变量"所以" printf"的功能是打印指针变量指向的数据。
答案 3 :(得分:0)
虽然您的代码输出似乎是基于@dasblinkenlight告诉的原因而工作的,但将char
分配给char*
并不正确。编译器(GCC 4.8.4)警告也有助于理解该问题:
warning: assignment makes pointer from integer without a cast [enabled by default]
a = b;
^
将int
分配给int*
时,编译器会打印此类警告。它也以同样的方式适用于char
和char*
,因为char
是C中int
的一种形式。