小猪的C语言快速入门系列(五)

标签: C语言


本节引言

上一节我们C语言 复合数据类型 中的 数组 进行了解读,本节我们会继续来学习
复合数据类型中的 指针,指针可是C语言的灵魂;利用指针可以表示与使用复杂的
数据结构,让我们可以更加方便的使用数组与字符串;可以像汇编一样直接处理内存
单元地址;可以动态地进行内存空间分配;指针是C语言的重点,也是难点。


本节学习路线图


指针概念,指针与一维数组和字符串


指针与二维数组

这个知识点是指针里的难点,要弄懂这里的话,我们要先把重心放到二维数组上,先
彻底了解清楚二维数组!

  • Step 1:二维数组是 按行与列存储数据的,可以看成 若干行 + 每行若干列一维数组组成;
    比如:int a3 = {{1,2,3,4},{1,2,3,4},{1,2,3,4}}; 可以看成三行,每行有四个一维数组;

  • Step 2a 代表二维数组 首元素的地址 ,即 &a[0],如果换成数组的第二,三行的话,
    只需要把 a + 1a + 2这样,等价于&a1&a2

  • Step 3:我们可以把 a[0] 看做是指向 a[0][0] 的指针,那么 a[0]+1 即指向 a[0][1]
    即此时地址为:&a[0][1]

    PS:这里的+1的1是数组元素所占的字节数,比如int a[]的话,那么这个+1代表的就是往后
    移动4个字节,指向下一个元素;如果是+2的话就是后移8个字节,所以a[i][2] = a[i] + 2

  • Step 4:通过前面一维数组的学习,知道了 a[i] 等价于 *(a+i),同样的,扩展到
    二维数组的情况,则有 a[i][j]*(a+i)+ja[i]+j 都是等价的,都是表示数组元素
    a[i][j] 的地址,而求 a[i][j]的值,用*(a[i]+j)*(*(a+i)+j) 都是可以的

注意一点

*a 与 *(a+i) 都不代表任何具体的数据元素,所以当你引用他们的时候可能会引起错误!

如果上面的内容都捋清楚了,下面这几个点一清二楚了:

  • 1.数组首地址a[0]: a 不可以直接引用!!!
  • 2.一维数组a[0]首元的地址(&a[0][0]): a[0],*(a+0),*a;
  • 3.第一行的首地址: a + 1 同样不可以直接应用
  • 4.一维数组a1首元的地址(&a[1][4]): a[1],*(a + 1)
  • 5.序号为2行4列元素a[2][5]的地址:a[2]+4,*(a+2)+4,a[2][6]

使用代码示例

示例1指向数组元素

#include <stdio.h>
int main()
{int a[2][2] = {{1,2},{3,4}};int *p,i,j;p = a[0];//p = &a[0][0]或*a也可以printf("输出数组中所有的元素:\n");for(i = 0;i < 2; i++) {for(j = 0;j < 2;j++) {printf("%4d",*p);p++;}printf("\n");}return 0;
}

输出结果

示例2指向数组

#include <stdio.h>
int main()
{int i,j;int a[4][9];//定义一个行指针,并指向数组的首地址int (*p)[4];p = &a[0];printf("请输入二维数组中的数组元素:\n");for(i = 0;i < 4;i++) {for(j = 0;j < 4;j++){scanf("%d",p[i]+j);}}printf("输出二维数组中的数据:\n");for(i = 0;i < 4;i++) {for(j = 0;j < 4;j++){printf("%4d",*(p[i]+j));}printf("\n");}return 0;
}

输出结果


本文链接:小猪的C语言快速入门系列(五)
作者:Coder-Pig
出处:http://blog.csdn.net/coder_pig
本文基于知识共享署名-相同方式共享 4.0 国际许可协议发布,欢迎转载,
演绎或用于商业目的,但是必须保留本文的署名及链接。

小猪的C语言快速入门系列(五)相关推荐

  1. 小猪的C语言快速入门系列(三)

    小猪的C语言快速入门系列(三) 标签: C语言 本节引言: 在上一节中,对C语言的基本语法进行了学习,类比成学英语的话,我们现在 只是会单词而已,组成一个个句子还需要学习一些语法,本节学习的就是两对 ...

  2. 小猪的C语言快速入门系列(一)

    小猪的C语言快速入门系列(一) 标签: C语言 本系列教程引言: C语言 作为大学编程或者计算机专业的一门必修课,把很多初学编程的小伙伴 都难住了,感觉无从下手,本套教程就是为此而诞生的.教程会把 C ...

  3. 小猪的C语言快速入门系列(二)

    小猪的C语言快速入门系列(二) 标签: C语言 本节引言 在上一节中,对于C语言有了一个初步的了解,学会了如何使用IDE来进行 代码编写,编译和运行.而这一节,我们会对C语言的基本语法进行学习, C语 ...

  4. RHEL8.0快速入门系列笔记--计划任务服务crond(十五)

    RHEL8.0快速入门系列笔记–计划任务服务crond(十五) 1.了解计划任务的作用 作用:释放我们的双手,释放我们的时间 计划任务,让系统在将来的指定时间点执行某些任务(程序) 计划任务,可以周期 ...

  5. 视频教程-做游戏学Python-Python语言快速入门-Python

    做游戏学Python-Python语言快速入门 20年软件项目开发管理经验 工信部人才交流中心特聘专家讲师 日本U-CAN在线教育特聘主任讲师 国家十二·五规划软件工程教材作者(书:清华大学出版社出版 ...

  6. Common Lisp语言快速入门

    zhezhelin Common Lisp语言快速入门 Lisp是软件领域的分裂力量.一方面,Lisp爱好者誓言Lisp比软件领域内的其它语言都更加快捷.整洁和强大:而反对者则辩称,不可靠的执行和库支 ...

  7. c# wpf listbox 高度_WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  8. 2021-08-26 转载 Scala快速入门系列博客文章

    作者:Huidoo_Yang 出处:http://www.cnblogs.com/yangp/ 本文版权归作者Huidoo_Yang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 ...

  9. RHEL8.0快速入门系列笔记--理论知识储备(一)

    RHEL8.0快速入门系列笔记–理论知识储备(一) 红帽公司发布Linux8.0系统已经有一段时间,最近准备学习关于RHEL8.0的相关新特性.根据官方介绍:RHEL8.0在云/容器化工作负载方面做了 ...

最新文章

  1. pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)、并使用fill_value参数为行进行默认填充
  2. shell expect的简单用法
  3. 明明表中有这个索引,但mysql的force index 无效?
  4. [Javascript] Deep Search nested tag element in DOM tree
  5. spring-data-jpa Specification构建动态ql
  6. P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】
  7. ThinkPHP 3.2.3 关联模型的使用
  8. 叮!您收到一份超值Java基础入门资料! 1
  9. InnoDB发展历史
  10. 安卓PHP maker汉化,android 百度地图marker添加自定义视图
  11. 结构体struct的定义和使用
  12. Python+OpenCV:直方图均衡化(Histogram Equalization)
  13. android计时器代码百度网盘下载,计时器flash_求几个简单Flash计时器,可以自己设定时间的,百度云...
  14. Visual Studio 2019 Community 版离线注册
  15. 彩虹的原理与绘制方法
  16. C++开发 一个壁纸小软件
  17. (凯思奥2020-03月)问题记录3,GUI问题记录3 4,国际化异常,微信平台接入 = 数据库修改 + 自动化填充 + 前后端接口修正 + 联调测试问题 + 微信与数字账号绑定 + 思考+部署
  18. 初始对准及组合导航技术
  19. 求字符串中的回文数或者是回文单词
  20. 项目管理笔记-第十三章 项目相关方管理

热门文章

  1. EM算法推导以及在高斯混合模型中的应用(详细)
  2. 打印一个字符串的全部子序列,包括空字符串
  3. 阿里开源 java 项目内存监控工具 arthas
  4. 微博程序员:我每天监控流量却没想到自己也成了流量
  5. Android 2.3 SD卡挂载流程浅析(三)
  6. Unity 常见优化
  7. Python图像平滑滤波处理(均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波)
  8. 用C语言表达增量式PID和位置式PID理论公式
  9. 无法对计算机进行搜索,电脑搜索功能不能使用解决办法
  10. VMware——网络服务IIS配置