gpt4 book ai didi

c++ - 需要简单的指针数组相等解释

转载 作者:行者123 更新时间:2023-11-30 19:55:31 25 4
gpt4 key购买 nike

刚刚回到大学的 C++ 编程,并记得为什么我认为这个指针业务如此疯狂。谁能给我一个关于这里发生的事情的快速解释?是否可以在main函数中获取int 20?

#include <stdio.h>

void test(int *b)
{
b[0] = 10;
b[1] = 20;
printf("\n %i \n ", b[1]); // prints 20
}

int main( int argc, char* argv[] )
{
int a;
test(&a);
printf("%i \n", a); //prints 10
// printf("%i \n", a[1]); // doesn't compile - why not 20?
return 0;
}

编辑:抱歉,我的简单问题对某些用户来说是一个负担,感谢那些真正认真对待它并告知我未定义行为的用户。我问这个问题的原因是由于我发现我无法弄清楚如何使用代码。我不是凭空捏造的。如果有人感兴趣的话,就在这里。看看 glhUnProjectf 函数和最后一个参数我打算如何使用它。
http://www.opengl.org/wiki/GluProject_and_gluUnProject_code

最佳答案

老实说,我有点惊讶它让你给 b[1] 赋值。我猜想,如果你取出不编译的部分,当你尝试将 20 分配给 b[1] 时,你会得到一个段错误,因为你的程序尚未在内存中分配该空间。无论如何,int a不是指针,它是变量,所以不能像数组一样进行索引。

回顾一下,这里是您所拥有的变量和指针的 segmentation :

int a - a是内存中的整数变量,但你的程序只关心整数的值,而不关心它实际在内存中的位置。

&a - 返回指向内存中整数 a 的指针。因为指向数组的指针也只是指向数组中第一个元素的指针,所以当您尝试对其进行索引时,程序不会提示

int* b - 与 a 类似,这是一个指向整数的指针,而不是整数本身。如前所述,指针可以像数组一样进行索引([0]、[1] 等),因为指向数组的指针实际上是指向数组中第一个元素的指针。正如前面提到的,尝试索引超过已分配的内存空间,无论您是否实际上有一个要索引的数组,都是未定义的行为(大多数时候它会给您一个段错误,但它也可能返回恰好位于内存中该位置的值,它实际上可以是任何东西,甚至不能保证是相同的数据类型)。

关于c++ - 需要简单的指针数组相等解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com