指针变量存储什么?

时间:2015-12-30 13:12:01

标签: c pointers

我输入了以下代码:

char *a;
char b = 'd';
a = b;
printf("%c", a);

输出 - 'd'。

我的查询是,因为a是指针变量,所以它应该存储地址。为什么在这种情况下存储字符值?

4 个答案:

答案 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*时,编译器会打印此类警告。它也以同样的方式适用于charchar*,因为char是C中int的一种形式。