我想将指针作为数组的大小元素传递
示例:
void hello(int array1[how can i refer pointer "ptr" here][2])
{
// i want to access the array used in the main() here
printf("hi");
}
int main()
{
int c=5;
int *ptr=&c;
a[*ptr][2];
a[0][1]=0;
a[0][2]=4;
}
我很抱歉我的问题不清楚,我想访问hello()函数中main()函数中使用的数组。
答案 0 :(得分:1)
您必须使用指针指向的值:
a[*ptr][2];
ptr
是指针指向的地址,而不是存储在那里的值。您可以使用取消引用运算符*
来获取值。
答案 1 :(得分:1)
使用取消引用运算符*
:
a[*ptr][2];
表达式*ptr
告诉编译器使用ptr
指向的值。
至于您更新的问题,这是不可能的。但它也不需要,因为它无论如何都是作为指针传递的。
声明一个函数时,这个:
void foo(int a[5][5])
与此相同:
void foo(int a[][2])
也与此相同:
void foo(int (*a)[2])
答案 2 :(得分:1)
当然,ptr
不是int
类型,它是类型int *
(整数指针)。数组下标必须是int
类型。
也许你想要的是a[*ptr][2]
。
答案 3 :(得分:1)
您需要使用* ptr so
来使用指针int c = 5;
int *ptr = &c;
a[*ptr][2];
否则你没有使用ptr的值,你在内存中使用它的地址会返回错误。
答案 4 :(得分:1)
它已经得到了很好的解答,你不能在数组a[0x3950f2][2]
中调用地址
始终使用指针*来获取数组a[*ptr][2]
中的位置以获得预期值 - 在这种情况下:a[*ptr][2]
== a[5][2]
。您可以阅读this.
修改为您更新的问题:您不能这样做。在调用函数或在函数中使用变量时,可以使用指针。
您的第二次修改:
void hello(int **array1)
{
// i want to access the array used in the main() here
printf ("hi");
a[0][0] = 24;
}
int main()
{
int c = 5;
int *ptr = &c;
int **a;
a[*ptr][2];
a[0][1] = 0;
a[0][2] = 4;
hello (a);
return 0;
}