我的老师让我找出差异。任何人都可以帮助我? 其实我知道的第一部分是指针数组但什么第二部分means.Both不一样的,因为我想为这个代码:int * x []和int(* x)[]之间的区别?
i = 1;
j = 2;
x[0] = &i;
x[1] = &j;
得到了一个错误说“左值要求”
我的老师让我找出差异。任何人都可以帮助我? 其实我知道的第一部分是指针数组但什么第二部分means.Both不一样的,因为我想为这个代码:int * x []和int(* x)[]之间的区别?
i = 1;
j = 2;
x[0] = &i;
x[1] = &j;
得到了一个错误说“左值要求”
int *x[3];
这里x
是一个指向int
的3个指针的数组。
int (*x)[3];
这里x
是指向三个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;
HTH
int(*x)[ARRAY_SIZE]
解释作为指针以一个整数数组。
通过近变量名“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
首先,请记住,C声明反映表达(即,声明模拟物使用)的类型。
举例来说,如果你有一个指向整数,你要访问的整数值被指向的,你取消引用与一元*
操作的指针,就像这样:
int x = *p;
类型的表达*p
是int
,所以指针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.
哪你指的是什么语言? C? – Max