首页 > 学院 > 开发设计 > 正文

int (*p)[5]分析

2019-11-10 20:23:49
字体:
来源:转载
供稿:网友

以下代码容易产生混乱:

int a[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12};	int (*p)[5] = &a;	for(auto i = p; i != p + 3; i++)	{		for(auto j = *i; j != *i + 5; j++)		{			cout<<*j<<" ";		}		cout<<i<<endl;	}

分析:

int (*p)[5];

p不解指针是指向数组的指针,解指针后是指向元素的指针,都是指针,当对p进行赋值后,p 和 *p值是一样的,只不过类型不一样,类型不一样,就会导致加上一个数后,实际的值变化是不一样的:p + n得到的值是p + n * 5 * sizeof(int);

而*p + n 得到的值是 *p + n * sizeof(int);

这和指向基本类型的指针的道理是一样的:

int a = 5;

int *p = &a;

char *p1 = (char *)p;

p + n得到的值是 p + n * sizeof(int); p1 + n 得到的是 p + n * sizeof(char);

对p的赋值:

从概念上讲,p是指向数组的指针,如果有int a[3][4], p = a[0]是不对的,因为a是指向数组的数组类型,a[0]是数组类型,应该把数组的地址赋值给指向数组的指针;所以正确的赋值应该是:p = &a[0]


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表