C 为什么可以';我把指针int*x的值设为,比如说,10?

C 为什么可以';我把指针int*x的值设为,比如说,10?,c,pointers,C,Pointers,我严重误解了指示,所以希望有人能澄清这一点 int*x是指向int的指针。x指指针本身,*x指存储在x的内存位置的值(或目标) 如果我想让x指向一个int,谁的值是10,为什么我不能int*x=10 我不太明白为什么当我们做类似于printf(“%d”,*x)的事情时,它打印出存储在x处的值,但我们不能执行int*x=10int*x表示----x是整数指针类型 10是一个整数类型 在本例中,您试图将“整数”类型分配给“整数指针”类型,但由于两种不同的类型,该类型无效。int*x->x是整数类型(

我严重误解了指示,所以希望有人能澄清这一点

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

如果我想让x指向一个int,谁的值是10,为什么我不能
int*x=10

我不太明白为什么当我们做类似于
printf(“%d”,*x)的事情时
,它打印出存储在x处的值,但我们不能执行
int*x=10

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

10是一个整数类型


在本例中,您试图将“整数”类型分配给“整数指针”类型,但由于两种不同的类型,该类型无效。

int*x->x是整数类型(int*)的内存地址

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


希望我能很快解释清楚。良好的编码。

您的困惑与初始化和分配之间的差异有关。以下是初始化的示例:

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

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

您正在初始化
x
指向的地址,该地址被声明为
int*
类型。您希望
int*x;x=10工作?在C中初始化变量需要一个与待初始化id兼容的右值。
int*x
声明一个指向int的指针。
10
是int,而不是指向int。如果你不这样想,你就错报了,因为这只是语言的规则。可能是星号的位置和用法让你不舒服<代码>整数*x指示指向int声明的指针<代码>printf(“%d”,*x)将其用作解引用运算符。有显著差异(显然)。