C指针问题

12 浏览
0 Comments

C指针问题

对于:

int *a;

a是一个地址,可以存储一个整数。

&a是一个存储a的地址。

那么,&a存储在哪里?

&(&a)存储在哪里?

&(&(&a))存储在哪里?

这个地址的存储在哪里停止?

0
0 Comments

C指针问题的出现原因是对变量和变量地址的概念混淆。在C语言中,变量是存储在内存中的一块地址上的一段数据。而变量的地址是指这块内存地址的值。

当我们在代码中使用指针来操作变量时,需要使用“&”运算符来获取变量的地址。如果我们没有显式地写出“&a”,那么变量a的地址将不会被存储在任何地方。当我们写出“&a”时,程序会计算出变量a在栈中的地址,并将该地址存储在一个临时变量或者一个我们自己定义的变量中。

例如,在下面的代码中,我们可以看到不同的情况下如何使用变量a的地址:

functionCall(&a); // 地址将存储在一个用于传递参数的临时变量中
int** b = &a; // 地址将存储在变量b中
otherFunctionCall(&&a); // 非法,因为&&a是一个表达式,&运算符不能应用于它

即使我们不写“&a”,变量a仍然会被存储在某个地方吗?

:我不确定我是否理解了你的问题... 变量a就像其他局部变量一样存储在栈上。当你写出“&a”时,程序会计算出变量a在栈中的地址(它已经知道栈指针,因为它是一个寄存器,还知道栈帧的偏移量,因为它是一个编译时的常量),并对其进行一些操作,正如sharptooth解释的那样。

是的,你再次混淆了变量和变量的地址。它们通常不相等。变量是一块位于某个地址的内存块,其中包含一些值。

这个回答对我很有帮助(还有sharptooth的回答):stackoverflow.com/questions/991075/…

0
0 Comments

C指针问题的出现是因为对于变量a的理解出现了误解。实际上,a不是可以存储整数的地址,而是足够大以容纳一个整数的地址的变量。在a中直接存储的唯一"整数"是一个整数的地址,可以将其视为一个整数本身。

解决这个问题的方法是,首先声明一个指向整数的指针变量a,然后将整数变量b的地址赋值给a,最后使用printf函数打印出a的地址。

代码示例如下:

int *a;
int b;
a = &b;
printf("a is now %x\n", (unsigned int) a);

值得注意的是,a本身也有一个地址,即&a,但是这个地址在运行时并没有存储在一个明确的位置。

如果非要存储一个看起来像整数0的值,可以使用以下语法:

a = 0;

但这只是一个简写语法,表示"空指针",也就是一个指针值,保证不是任何实际对象的地址。

尽管这个答案并不完美,但我认为它肯定能够最好地解释/回答原始问题。

0
0 Comments

C指针的问题是指在C语言中使用指针时遇到的一些困惑和错误。具体而言,本文讨论了一个关于指针常量的问题。以下是问题出现的原因以及解决方法:

问题的原因是有关指针常量的概念的混淆。在C语言中,指针常量是指指针的值是固定的,不能更改。然而,在某些情况下,指针常量的定义可能会引起困惑,因为指针的值可能会在不同的运行中更改。这导致了一些关于指针常量的错误理解。

解决这个问题的方法是对指针常量的定义进行更清晰的解释。指针常量的值是固定的,不能更改,但是指针指向的对象或变量的值可以更改。在C语言中,可以使用关键字const来定义指针常量,以确保指针的值不被更改。另外,应该清楚地理解指针常量和指针变量之间的区别,并正确使用它们。

总之,C指针问题的出现是由于对指针常量概念的混淆,解决这个问题的方法是对指针常量的定义进行更清晰的解释,并正确使用它们。理解指针常量和指针变量之间的区别对于正确使用指针是非常重要的。

0