gpt4 book ai didi

arrays - C 将指针传递给堆栈上的数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:43 26 4
gpt4 key购买 nike

我对将指针传递给如下初始化的数组是否有效(在 C 中)感到困惑(例如,在堆栈上的编译时):

int a[] = {1, 2, 3};

my_func(&a);


void my_func(int **a)
{
int *tmp = *a; /* this statement fixes the problem */
printf("%d %d %d", (*a)[0], (*a)[1], (*a)[2]); /*doesn't work */
printf("%d %d %d", tmp[0], tmp[1], tmp[2]); /*does work */
}

当我使用 gdb 单步执行此操作时,我无法从“内部”my_func“看到”任何值 (*a)[0] 等。例如

(gdb) p (*a)[0]
Cannot access memory at address 0x0

我在想,对于堆栈上而不是堆上的数组可以做什么和不能做什么,我可能存在根本性的误解?

我希望情况并非如此,因为像示例中那样在堆栈上声明数组对我的单元测试来说非常方便,但我需要测试期望指向指向 int 的指针的函数。

请注意,我确实收到如下编译器警告:

 test_utility.c:499:5: warning: passing argument 1 of ‘int_array_unique’ from incompatible pointer type [enabled by default]
../src/glamdring2.h:152:5: note: expected ‘int **’ but argument is of type ‘int (*)[12]’

但我认为可以将 int *a[]**a 混合使用吗?也许不是?它们不等价吗?

最佳答案

a[] 是数组,不是指针(“不是左值”);在你的函数调用中

func( &a);

&a 衰减为指向 int 的指针; &a 不是指向 int 的指针。为什么? 没有指向的指针。

函数原型(prototype)

void func( int **p);

需要一个指向 int 的指针,这不适合像您那样使用指向 int 的指针作为参数调用的函数。

更新:我不知道 OP 的意图是什么,所以这只是一个猜测......

void my_func(int *a);

int a[] = {1, 2, 3};

my_func(a); /* note: this is equivalent to my_func( &a ); */


void my_func(int *a)
{
printf("%d %d %d\n", a[0], a[1], a[2] );
}

关于arrays - C 将指针传递给堆栈上的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475407/

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