辨析指针常见误区

        二维数组的鞍点,用到了指针的知识,阅读了三个小练习之后可以看看强化一下。

  • 小练习1
int *ar[10];
//正确定义方式
int* (*p)[10] = &ar;	//数组指针
int* (&a)[10] = ar;	//引用
int **s = ar;	//指向数组元素的指针

  • 小练习2
int ar[3][4];
int(*p)[3][4] = &ar;	//指向整个二维数组的指针
int(&a)[3][4] = ar;		//引用整个二维数组
int(*s)[4] = ar;		//指向二维数组首元素(一维数组)
  • 小练习3
	int arr[5][2] = { 0,1,2,3,4,5,6,7,8,9 };
	int *s = (int *)&arr[0][1];      //将地址进行强转
	int(*p)[2] = &arr[0];            
	printf("%d, %d", s[2], p[1][3]);

        结果是3、5

扫描二维码关注公众号,回复: 1762479 查看本文章

        小总结:直接使用数组名会发生退化(下退一级),指向其首元素的地址;如果不允许发生退化,必须要使用&

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/80636036