读书人

【指针】【数组】【定义】【疑点】

发布时间: 2013-12-19 00:33:34 作者: rapoo

【指针】【数组】【定义】【疑问】
eg.


[解决办法]


int main()
{
int (*ip1)[4];
int *ip2[4];

int ary1[4]={0,1,2,3};//将ary1[4]改成5就编译通不过了 ,因为只能指向4个元素的数组
ip1 = &ary1;

printf("%p,%p,%p\n",ip1,ary1,&ary1);
printf("%p,%p,%p,%p,0x%x\n",ip1[0],ip1[1],ip1[2],ip1[3],sizeof(ary1));//内存间隔 sizeof(ary1)
printf("%d,%d,%d,%d\n",(*ip1)[0],(*ip1)[1],(*ip1)[2],(*ip1)[3]);


int a=3,b=2,c=4,d=6;
ip2[0]=&a;
ip2[1]=&b;
ip2[2]=&c;
ip2[3]=&d;

printf("%d,%d,%d,%d\n",*(ip2[0]),*(ip2[1]),*(ip2[2]),*(ip2[3]));//ip2数组保存的是指针,所以可以这么整

return 0;
}

//通过简单的东西延伸出去,关键是理解,不清楚的东西就用printf出来
//这是编程者的最基本的调试办法,上班第一天,就有前辈这么教我

[解决办法]
int (*ip)[4];

int *ip[4];
对于这两个,主要看运算符的优先顺序,其实指针和数组差不多。都可以看成二维数组。
第一个,括号优先级高,所以*p先变成一个数组,后面在与[4]结合,变成n行4列数组


第二个,[]优先级高,先变成p[4]数组,然后与*结合,变成4行n列数组
对于中文叫法,我也老是混乱,晕

读书人网 >C++

热点推荐