将指针作为C中数组的大小传递

时间:2013-10-23 08:14:55

标签: c

我想将指针作为数组的大小元素传递

示例:

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()函数中使用的数组。

5 个答案:

答案 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;
}