55.C语言 指针数组和数组指针区别

最后更新于:2020-09-04 21:46:46

一、简介

1.数组

数组中的每个元素都有一个序号,这个序号从0开始,称为下标Index,例如,a[0] 表示第1个元素,a[3] 表示第4个元素。数组是一个整体,它的内存是连续的,内存示意图:

image

2.指针

指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存,以下是有效的指针声明:

int    *p;    /* 一个整型的指针 */
double *p;    /* 一个 double 型的指针 */
float  *p;    /* 一个浮点型的指针 */
char   *p;    /* 一个字符型的指针 */

注意:不要忘记在指针类型和变量名中间还有一个 * 号,没有这个 * 号,只是定义了一个普通变量,这也是普通变量声明和指针声明的区别之一;

3.指针和数组区别

指针和数组区别这里不再继续啰嗦,可以直接参考文章:指针和数组区别

二.指针数组和数组指针区别

可能不少小伙伴很懵逼,又是指针数组又是数组指针的,傻分不清??

image

1.指针数组

指针数组:它实际上是一个数组,数组的每个元素存放的是一个指针类型的元素。

int* arr[8];
//优先级问题:[]的优先级比*高
//说明arr是一个数组,而int*是数组里面的内容
//这句话的意思就是:arr是一个含有8个int*的数组

int* arr[8] 表示由8个一维数组构成,也可以理解为是一个二维数组,如下图:

image

示例代码如下:

char a[3][8]={"gain","much","strong"}; //二维数组,由三个一维数组够成
char *n[3]={"gain","much","strong"}; //指针数组,由三个一维数组够成

2.数组指针

数组指针:它实际上是一个指针,该指针指向一个数组。

int (*arr)[8];
//由于[]的优先级比*高,因此在写数组指针的时候必须将*arr用括号括起来
//arr先和*结合,说明arr是一个指针变量
//这句话的意思就是:指针arr指向一个大小为8个整型的数组。

int (*arr)[8] 表示指针arr指向一个大小为8个整型的数组,如下图:

image

示例代码如下:

/************************************************************************/
/*@文件名      : C/C++ 数组指针.cpp
/*@日  期      : 2020/08/30 21:52
/*@作  者      : 猿说编程 
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : 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]的值;


猜你喜欢

1. 指针和数组区别

2. 指针数组

3. NaN(Not a Number)

4. memcpy/strcpy/strcpy_s 区别

5. unicode 和多字节区别

6. 数组定义和使用

7. sizeof和strlen函数区别

8. Debug和_DEBUG区别

9. _WIN32/WIN32/_WIN64/WIN64区别

10. 判断exe可执行程序是32位的还是64位

11. 数组下标越界

12. 数组内存溢出

13. 数组下标越界和内存溢出区别

14. 二维数组行数和列数计算

15. 指针声明和定义

16. 指针p++/p-–



转载请注明: 猿说编程 » C/C++教程 » 指针数组喝数组指针区别

赞赏

微信赞赏支付宝赞赏