巧记“指针数组”与“数组指针”

指针数组:存放指针的数组

char *(week)[7] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};

数组指针:指向数组的指针

int arr[2][3] = { {1,1,1},{2,2,2} };

指针数组数组指针在网上有很多很好的文章,但每次看过不久后就又忘掉了,这两个概念非常容易弄混,一不小心就会弄错。所以,在此中总结了几个快速记忆的方法,只为快速区分两者,不涉及更深层次的内容。因为是助记,所以以下内容可能不太准确,只为记忆方便,建议理解其概念后阅读。

分析:

数组指针

  • 数组在前,强调了数组,表示可以存放二维数组。而二维数组中,有多个一维数组,可以理解为,多个指针。
  • 总结:存放二维数组,二维数组中有多个指针



指针数组

  • 指针在前,强调指针,表示可以存放指针(eg:字符串)。多个这样的指针组成数组
  • 总结:存放指针(或者理解为存放字符串),多个指针形成数组



快速辨别

利用指针与数组的特征快速辨别,数组 int arr[] 特征为数组名旁边的括号,指针 char *p 特征为指针名前的 * 符号

数组指针
char (*p)[9] 这种形式,
1.数组角度:有两个括号,理解为两个数组,强调了数组,所以是数组+指针
2.指针角度:括号把 * 括在里面,从整体上看没有指针的特征“ * ” ,所以是数组+指针

指针数组
char *p[9] 这种形式
1.数组角度:一个括号,没有强调数组,所以是指针+数组
2.指针角度:从整体上看,有一个 * ,所以是指针+数组

总结:只看p,
p有*是指针--指针数组   char *p[]
p有()是数组--数组指针  char (*p)[]

实例:

int main()
{
    //指针数组测试    存放指针,形成数组
	const char* (week)[7] = { "Monday","Tuesday",
		"Wednesday","Thursday","Friday","Saturday","Sunday" };
	for (int i = 0; i < 7; i++)
	{
		printf(*(week + i));
		puts("");
	}

    //数组指针测试    存放二维数组
	int arr[2][3] = { {1,1,1},{2,2,2} };
	int(*p)[3] = arr;
	for (int i = 0; i < 6; i++)
	{
		printf("%d 
", (*p)[i]);
	}

}

输出为:

//指针数组
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
//数组指针
1
1
1
2
2
2
原文地址:https://www.cnblogs.com/TaoR320/p/12680189.html