C中的指针:为什么在获取x的地址时需要 *address_of_x = &x中的 *?

67up9zun  于 5个月前  发布在  其他
关注(0)|答案(8)|浏览(56)

假设我们有以下代码,它接受x,将值4存储在其中,然后将x的地址存储在指针变量中:

int x = 4;
int *address_of_x = &x;

字符串
int *address_of_x中的*的用途是什么?我理解*用于解引用指针-它获取一个地址并告诉你那里存储了什么。但是如果存储了一个地址,那么我们解引用什么?或者我们根本没有解引用任何东西?为什么不写为:

int address_of_x = &x;

ulydmbyx

ulydmbyx1#

int *address_of_x = &x;中的*未取消引用@尤金Sh。
它是类型声明的一部分:pointer to int

int x = 4;
int *address_of_x = &x;

字符串
相同

int x = 4;          // declare x as int
int *address_of_x;  // declare address_of_x as pointer to int
address_of_x = &x;  // Assign the address of x to address_of_x


为什么不写为:int address_of_x = &x;
&x不是int&xint *,指针(或地址)。指针不是整数。

gupuwyp2

gupuwyp22#

expression 中,*是解引用操作符。在 declaration 中,它是 pointer declarator 语法的一部分。您将address_of_x声明为指向int* 的 * 指针,而不仅仅是int
这种语法背后的想法是,为了方便起见,声明和标识符的使用应该看起来相似(通常通过解引用来使用指针)。
还要注意,每个声明为指针的标识符都需要*,即使你在一个声明中声明了多个标识符,像这样:

int *a, *b;

字符串
如果你写

int *a, b;


相反,b不是指针。不过,一般来说,最好避免在每个声明中声明多个标识符。

k5hmc34c

k5hmc34c3#

int *address_of_x = &x;不是赋值。int *address_of_x = &x;是一个声明int *address_of_x),带有initialization= &x)(注意,在史前的C中,初始化(与赋值相对)是在没有=的情况下完成的,这使得它们与赋值更加不同)。
在C镜像用法中的声明。int *address_of_x声明*address_of_x的类型为int,因此address_of_x的类型为 * 指向int* 的指针。然后= &x部分将此指向int* 的 * 指针转换为&xx的地址)。

o3imoua4

o3imoua44#

这是指针的定义,address_of_x变量的类型是int *,一个指向int的指针。这里没有“解引用”发生。
为什么不写成:

int address_of_x = &x;

字符串
两件事

  • C是一种强类型语言。
  • 变量名与其类型没有任何联系
mec1mxoz

mec1mxoz5#

简单回答:**在变量声明或定义语句中的星号不是解引用操作符。**相反,它是一个修饰符。
在给定的上下文中,星号表示“将mext标识符定义为指向基类型的指针”。
你肯定不会问为什么[10]int a[10]中的意思不是“取数组的第10个元素”。嗯,一般吧。这里的括号也不是括号运算符,原因完全相同。
为什么不写成:

int address_of_x = &x;

字符串
编译器 * 从不 * 尝试解释标识符的字面意思。它只在声明语句中确定标识符的类型时查找修饰符。
也就是说,这段代码不会像它看起来那样工作:

int *not_a_pointer, not_an_array[10];
float a_character;

8fsztsew

8fsztsew6#

int *address_of_x = &x; * 声明 * 一个类型为“指向int的指针”的变量(int *address_of_x),然后用x(= &x)的地址 * 替换 * 它。
所以这个*不是解引用,而是声明的一部分。

cld4siwp

cld4siwp7#

这两个代码段在功能上是相同的:

int *address_of_x = &x;

字符串

int *address_of_x;
address_of_x = &x;


在第一个例子中,你在一个语句中定义和初始化指针,但它可能看起来像是错误的语法。在第二个例子中,定义和赋值是独立的语句,代码更清晰。
还没有解引用。

aamkag61

aamkag618#

读作-int x = 4; int* address_of_x = &x;
1.你创建了一个int类型的变量x,并在其中存储了一个值4。
1.你创建了一个int* 类型的变量address_of_x,即指向一个int值的指针,并在其中存储了x的地址。
注意:指针不仅仅是一个地址,它是一个指向pointerType类型的变量的地址。

pointerType* pointer = &variable

字符串
你可以通过https://www.youtube.com/watch?v=zuegQmMdy8M,宇宙中最好的指针教程:)

相关问题