目录
- [一.简介]
- [1.数组]
- [2.指针]
- [3.指针和数组区别]
- [二.指针数组和数组指针区别]
- [1.指针数组]
- [2.数组指针]
- [三.猜你喜欢]
零基础 C/C++ 学习路线推荐 : [C/C++ 学习目录]>> [C 语言基础入门]
一.简介
1.数组
[数组]中的每个元素都有一个序号,这个序号从 0
开始,称为下标index
,例如,a[0]
表示第 1
个元素,a[3]
表示第 4
个元素。数组是一个整体,它的内存是连续的,内存示意图:
C语言 指针数组和数组指针区别
2.指针
[指针]很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存,以下是有效的指针声明:
int *p; /* 一个整型的指针 */
double *p; /* 一个 double 型的指针 */
float *p; /* 一个浮点型的指针 */
char *p; /* 一个字符型的指针 */
注意:不要忘记在指针类型和变量名中间还有一个 * 号,没有这个 * 号,只是定义了一个普通变量,这也是普通变量声明和指针声明的区别之一;
3.指针和数组区别
指针和数组区别这里不再继续啰嗦,可以直接参考文章:[指针和数组区别]
二.指针数组和数组指针区别
可能不少小伙伴很懵逼,又是指针数组又是数组指针的,[指针数组和数组指针区别]?? 傻分不清??
1.指针数组
[指针数组]:它实际上是一个数组,数组的每个元素存放的是一个指针类型的元素。
int* arr[5];
//优先级问题:[]的优先级比*高
//说明arr是一个数组,而int*是数组里面的内容
//这句话的意思就是:arr是一个含有5个int*的数组
int* arr[5]
表示由 5
个一维数组构成,也可以理解为是一个[二维数组],如下图:
C语言 指针数组和数组指针区别
示例代码如下:
char a[3][8]={"gain","much","strong"}; //二维数组,由三个一维数组够成
char *n[3]={"gain","much","strong"}; //指针数组,由三个一维数组够成
2.数组指针
[数组指针]:它实际上是一个指针,该指针指向一个数组。
int (*arr)[5];
//由于[]的优先级比*高,因此在写数组指针的时候必须将*arr用括号括起来
//arr先和*结合,说明arr是一个指针变量
//这句话的意思就是:指针arr指向一个大小为5个整型的数组。
int(*arr)[5]
表示指针 arr
指向一个大小为 5
个整型的数组,如下图:
C语言 指针数组和数组指针区别
示例代码如下:
/******************************************************************************************/
int a[4][5];
int (*p)[5]=a;//指针p指向一个大小为5个整型的数组
*(p+i)是一维数组a[i][0]的地址;
(p+2)+3表示a[2][3]地址(第一行为0行,第一列为0列);
*(*(p+2)+3)表示a[2][3]的值;