1

我的老师让我找出区别。有人可以帮我吗?实际上我知道第一部分是指针数组,但第二部分是什么意思。两者都不相同,因为我为此尝试了一个代码:

i = 1;
j = 2;
x[0] = &i;
x[1] = &j;

收到错误提示“需要左值”

4

5 回答 5

8

如有疑问,请咨询cdecl

int (*x)[]
declare x as pointer to array of int

int *x[]
declare x as array of pointer to int
于 2012-09-26T13:12:18.490 回答
3
int *x[3]; 

x是一个由 3 个指针组成的数组int

int (*x)[3];

这是一个指向三个sx数组的指针。int

这是两者的使用示例:

int* arrayOfPointers[3];
int x, y, z;
arrayOfPointers[0] = &x;
arrayOfPointers[1] = &y;
arrayOfPointers[2] = &z;

int (*pointerToArray)[3];
int array[3];
pointerToArray = &array;

高温高压

于 2012-09-26T13:10:19.327 回答
2

从变量名“x”附近开始并以类型结束,记住Operator Precedence。意思是,() 和 [] 中 * 之前的任何内容。

     x[] -- x is an array
    *x[] -- x is an array of pointers
int *x[] -- x is an array of pointers to ints

(*x)        -- x is a pointer
(*x) []     -- x is a pointer to an array
int (*x)[]  -- x is a pointer to an array of type int
于 2012-09-26T13:33:51.670 回答
2

首先,请记住 C 声明反映了表达式的类型(即,声明模仿使用)。

例如,如果您有一个指向整数的指针,并且想要访问所指向的整数值,则可以使用一元运算符取消对指针的引用*,如下所示:

int x = *p;

表达式 的类型*pint,所以指针的声明p

int *p;

int现在假设您有一个指向;的指针数组。要访问任何特定的整数值,您可以在数组中下标以找到正确的指针并取消引用结果:

int x = *a_of_p[i];

下标运算符[]的优先级高于一元运算*符,因此表达式*a_of_p[i]被解析为*(a_of_p[i]); 我们正在取消引用表达式的结果a_of_p[i]。由于表达式 *a_of_p[i]的类型是int,所以数组的声明是

int *a_of_p[N];

现在翻转它;而不是指向 的指针数组int,您有一个指向 的数组的指针int。要访问特定的整数值,您必须首先取消引用指针然后为结果下标:

int x = (*p_to_a)[i];

由于[]优先级高于*,我们必须使用括号来强制对运算符进行分组,以便将下标应用于表达式的结果*p_to_a。由于表达式的类型(*p_to_a)[i]int,因此声明是

int (*p_to_a)[N];

当你看到一个看起来有点毛茸茸的声明时,从最左边的标识符开始,然后走出来,记住这一点,[]并且()具有比 更高的优先级*,指针数组也是如此,是指向*a[]数组的指针,(*a)[]*f()返回指针的函数,(*f)()是指向函数的指针:

      x       -- x
    (*x)      -- is a pointer
    (*x)[N]   -- to an N-element array 
int (*x)[N]   -- of int

     x        -- x
     x[N]     -- is an N-element array
    *x[N]     -- of pointer
int *x[N];    -- to int.  
于 2012-09-26T13:37:55.980 回答
0

int(*x)[ARRAY_SIZE]解释为指向整数数组的指针。

于 2012-09-26T13:11:40.107 回答