2012-09-26 289 views
0

我的老师让我找出差异。任何人都可以帮助我? 其实我知道的第一部分是指针数组但什么第二部分means.Both不一样的,因为我想为这个代码:int * x []和int(* x)[]之间的区别?

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

得到了一个错误说“左值要求”

+2

哪你指的是什么语言? C? – Max

回答

3
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

0

int(*x)[ARRAY_SIZE]解释作为指针以一个整数数组。

7

如有疑问,请咨询cdecl

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

int *x[] 
declare x as array of pointer to int 
+0

真棒网站:)谢谢。 – keyser

+0

+1伟大的网站! – Raj

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 
1

首先,请记住,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. 
相关问题