在C语言和C++等语言中,
数组元素全为指针变量的数组称为指针数组。
指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。
指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活。
数组指针 是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动);
指针数组是数组元素为指针的数组,其本质为数组。
数组指针 只是一个指针变量,是C 语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。
指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间.
参考,百度百科对这两个名词的解说:
https://baike.baidu.com/item/%E6%8C%87%E9%92%88%E6%95%B0%E7%BB%84/8669080?fr=aladdin
数组指针:
数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)。

#include<stdio.h>
int main()
{
char c[][4] = {"哥", "哥", "我", "岸", "上", "走"}; //UTF-8:一个汉字=3个字节
char (*p)[4];
int i;
p=c; //将指针定位于c[0]
for(i=0;i<=5;i++)
{
printf("%s, ", *(p+i)); //或者将*(p+i)替换成*p++
}
printf("\n");
for(i=5;i>=0;i--)
{
printf("%s,",*(p+i)); //或者将*(p+i)替换成*--p
}
return 0;
}
指针数组:
指针数组是数组元素为指针的数组,其本质为数组。

#include<stdio.h>
int main()
{
int i;
char *pch[6] = {"妹","妹","你","坐","船","头"};
for(i=0;i<6;i++)
{
printf("%s, ",pch[i]);
}
printf("\n");
for(i=5; i>=0; i--)
{
printf("%s\n",pch[i]);
}
return 0;
}

没有括号的是指针数组,比如 int *p[5] 就是一个指针数组,一个数组里面装的全是指针类型的数据类型;
有括号的是数组指针,比如 int (*p)[5] 就是一个数组指针,是一个纸箱数组的指针;
int *p[5] 中括号表示是一个数组,中括号的优先级高于星号指针,也就是说,首先可以确定这是一个数组,定语是数组,修饰定语的修饰词是“指针”,修饰词放在定语前面,得到“指针数组”。
int (*p)[5] 由于小括号的原因,指针的*的优先级最高,也就是说,首先来说这是一个指针,定语就是指针,定语的修饰词“数组”,修饰词放在定语前面,得到“数组指针”。
本文详细介绍了指针数组和数组指针的概念。指针数组是数组的元素全为指针变量,常用于处理字符串。而数组指针则是指向数组首元素的地址,相当于二级指针,不可移动。两者在内存占用和使用上有所区别,理解它们有助于提升C语言编程能力。

被折叠的 条评论
为什么被折叠?



