指针和数组的那些难分难解问题

int _tmain()
{
    int x = 20;

int ia[10]; int (*pi)[10]; int *a[10]; //a是一个数组,数组中的每一个元素都是int * 类型的指针 int **arr[10]; //arr是一个数组,数组中的每一个元素都是int ** 类型的指针 int (**def)[10]; //def是一个二级指针,指向一个一维数组,数组中的每一个元素都是int。 int *(*gh)[10]; //gh是一个指针,指向一个一维数组,数组中的元素都是int * int (*f[10])(); //f是一个数组,含有10个元素,每一个元素都是函数指针(参数为无,返回值为int) int *((*b)[10]); //b是一个指针,指针指向一个一维数组,每一个元素都是一个int *类型的指针 int (*fun)(int); //fun是一个函数指针,参数为int 返回值为int int (*(*F)(int,int))(int); //F是一个函数指针,参数为int,int,返回值为一个函数指针,这个函数指针的参数为int,返回值为int /*首先来分解这些定义究竟是什么意思。
int ia[10]是个简单的数组,数组中的每一个元素都是int型整数,
int *a[10]是个数组,数组中每一个元素都事int型指针,
int (*pi)[10]是个指针,这个指针指向一个一维数组,数组中的每一个元素都是int型整数。
至于这些都是怎么判断出来的呢,其实里面有个规律,首先找到定义的变量名,而后从变量向右看,如int *a[10]首先找到变量名称 ‘a',而后看向 a 的右边是 [10],那么能够得出 a 是一个数组且
数组中有10个元素,而后再从变量往左看,a 的左边是 int *,那么赞成能够获得 a 数组中的元素类型都为int *,也就是都是int型指针,至此,能够得出结论,a是一个一维数组,数组中的每一个元素
都是一个int型的指针。

根据这个规律,一条一条来分析上面定义的各变量:
int **arr[10];    首先找到变量名arr,而后看右边[10],肯定arr是个数组,再看左边int **,肯定数组中的元素都是int **型的二级指针。
int (**def)[10];   首先找到变量def,而后看右边是个括号,括号优先级大于[],因此先看括号里面的(**def),首先找到括号中的变量def,而后看右边,右边没有内容,再看左边**,肯定def是个二级指针,而后再看括号外面,先看右边[10],是个数组,再看左边 int,肯定
            def是一个二级指针,最终指向的是一个一维数组,数组中的元素都是int型
int *(*gh)[10];   首先找到变量gh,gh在括号中,先看括号内的(*gh),gh右边没有内容,再看左边*,肯定gh是个指针,再看括号外面,右边是[10],肯定指针指向的是个数组,再看左边int *,肯定数组中的元素都是int型的指针
int (*f[10])();   首先判断这个定义是一个函数指针的申明,先找到变量f,发现f在括号(*f[10])中,那先判断括号中的内容,先找变量f,再看右边是[10],肯定是个数组,再看左边*,肯定数组中的元素都是指针,再看全局,能够肯定每一个元素都是一个函数指针,这个函数指针
             的参数是无类型,返回值是int型。
到这来咱们就会判断这些定义到底定义的是些什么内容了,那接下来的sizeof就好办了。

int len = 0; len = sizeof a;           //a是数组,长度就是 sizeof(int)*10 = 40
len
= sizeof arr; //arr是数组,数组元素都是指针, sizeof(p)*10 = 40, (p表明指针,通常指针的大小都是4字节) len = sizeof def; //def是指针,指针是大小是 4
len
= sizeof gh;            //gh是指针,指针长度为4 len = sizeof f;            //f是数组,数组元素是指针,4*10=40

len
= sizeof b; len = sizeof fun; len = sizeof F; gh = &a; b = &a; for (int i=0;i<10;i++) { ia[i] = i+20; a[i] = new int[10]; *a[i] = i; arr[i] = &a[i]; } pi = &ia; def = &pi; (*(*def))[3] = 21; *((*gh)[1]) = 133; *((*gh)[2]) = 13; return 0; }
相关文章
相关标签/搜索