为什么不能将指针**的值设置为10?

时间:2019-02-19 23:28:49

标签: c pointers

我严重误解了指针,因此希望有人可以澄清这一点。

int *x;是一个指向int的指针。 x指向指针本身,*x指向存储在x的内存位置的(或目标)。

如果我希望x指向一个int(值是10),为什么我不能int *x = 10;呢?

我不太了解为什么当我们执行类似printf("%d", *x);的操作时,它会打印出存储在x处的值,但是我们却不能执行int *x = 10;

3 个答案:

答案 0 :(得分:4)

您的困惑与初始化和赋值之间的区别有关。这些是初始化的示例:

int a = 5;    // valid; "a" is an int which is initialized with the value 5
int *b = &a;  // valid; "b" is an int * which is initialized with the address of "a"
int *c = 10;  // invalid; "c" is an int * which is initialized with the value 10

这些是作业:

a = 5;    // valid; "a" is assigned the value 5
b = &a;   // valid; "b" is assigned the address of "a"
*b = 10;  // valid; "b" points to "a", and the value "b" points to is set to 10

请注意,*的使用在两者之间有所不同。初始化时,*表示给定的变量是一个指针,而赋值(或任何表达式)中的*表示该指针已被取消引用。

答案 1 :(得分:2)

int * x-> x是整数的内存地址,键入(int *)。

如果您执行* x,它会显示内容,因为*是一个操作数,一个内存操作数显示的是该内存地址中存储的内容,而(int *)是一种数据类型,是指向内存中某物的指针,完全不同。

希望我很快解释了。良好的编码。

答案 2 :(得分:1)

int * x表示---- x是整数指针类型。

并且10是整数类型。

在您的情况下,您尝试将“整数”类型分配给“整数指针”类型,由于两种不同的类型,该类型无效。