C语言 数组指针 - C语言零基础入门教程

比眉伴天荒 2022-09-08 15:49 345阅读 0赞

目录

  • 一.简介

    • 1.数组
    • 2.指针
    • 3.指针和数组区别
  • 二.数组指针
  • 三.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.简介

1.数组

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

3e36eb2e398e1629737de5a8a0734075.png

2.指针

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

  1. int *p; /* 一个整型的指针 */
  2. double *p; /* 一个 double 型的指针 */
  3. float *p; /* 一个浮点型的指针 */
  4. char *p; /* 一个字符型的指针 */

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

3.指针和数组区别

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

二.数组指针

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

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

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

C语言 数组指针

示例代码如下:

  1. /******************************************************************************************/
  2. //@Author:猿说编程
  3. //@Blog(个人博客地址): www.codersrc.com
  4. //@File:C语言教程 - C语言 数组定义和使用
  5. //@Time:2021/06/19 08:00
  6. //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  7. /******************************************************************************************/
  8. //一维数组
  9. int a[5] = { 1, 2, 3, 4, 5 };
  10. //步长为5的数组指针,即数组里有5个元素
  11. int (*p)[5];
  12. //把数组a的地址赋给p,则p为数组a的地址,则*p表示数组a本身
  13. p = &a;
  14. //%p输出地址, %d输出十进制
  15. //\n回车
  16. //在C中,在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址,它的类型取决于数组元素的类型。
  17. printf("%p\n", a); //输出数组名,一般用数组的首元素地址来标识一个数组,则输出数组首元素地址
  18. printf("%p\n", p); //根据上面,p为数组a的地址,输出数组a的地址
  19. printf("%p\n", *p); //*p表示数组a本身,一般用数组的首元素地址来标识一个数组
  20. printf("%p\n", &a[0]); //a[0]的地址
  21. printf("%p\n", &a[1]); //a[1]的地址
  22. printf("%p\n", p[0]); //数组首元素的地址
  23. printf("%d\n", **p); //*p为数组a本身,即为数组a首元素地址,则*(*p)为值,当*p为数组首元素地址时,**p表示首元素的值1
  24. printf("%d\n", *p[0]); //根据优先级,p[0] 表示首元素地址,则*p[0]表示首元素本身,即首元素的值1
  25. printf("%d\n", *p[1]); //为一个绝对值很大的负数,不表示a[1]...表示什么我还不知道
  26. //二维数组
  27. int a[4][5];
  28. int (*p)[5]=a;//指针p指向一个大小为5个整型的数组
  29. *(p+i)是一维数组a[i][0]的地址;
  30. (p+2)+3表示a[2][3]地址(第一行为0行,第一列为0列);
  31. *(*(p+2)+3)表示a[2][3]的值;

三.猜你喜欢

  1. 安装 Visual Studio
  2. 安装 Visual Studio 插件 Visual Assist
  3. Visual Studio 2008 卸载
  4. Visual Studio 2003/2015 卸载
  5. C 语言逻辑运算符
  6. C 语言三目运算符
  7. C 语言逗号表达式
  8. C 语言 sizeof 和 strlen 函数区别
  9. C 语言 strcpy 和 strcpy_s 函数区别
  10. C 语言 memcpy 和 memcpy_s 区别
  11. C 语言 数组定义和使用
  12. C 语言 数组遍历
  13. C 语言 数组下标越界
  14. C 语言 数组内存溢出
  15. C 语言 数组下标越界和内存溢出区别
  16. C 语言 二维数组定义和使用
  17. C 语言 二维数组行数和列数计算
  18. C 语言 指针声明和定义
  19. C 语言 指针 p++ / p–
  20. C 语言 p++/§++/_(p++)/_p++
  21. C 语言 使用指针遍历数组
  22. C 语言 指针和数组区别
  23. C 语言 数组指针
  24. C 语言 指针数组

未经允许不得转载:猿说编程 » C 语言 数组指针

发表评论

表情:
评论列表 (有 0 条评论,345人围观)

还没有评论,来说两句吧...

相关阅读