5.1 指针与地址

指针是一种保存变量地址的变量ANSI C使用类型void*(指向void的指针)代替char *作为通用指针的类型一元运算符&可用于取一个对象的地址: p = &c把C的地址赋值给变量p,我们称p为指向c的指针.地址运算符&只能应用于内存中的对象,即变量与数组元素.不能作用于表达式 常量或register变量一元运算符*是间接寻址或间接引用运算符.当它作用于指针时,将访问指针所指向的对象由于指针也是变量,所以在程序中可以直接使用,而不必通过间接引用的方法使用

  

5.2 指针与函数参数

C语言是以传值的方式将参数传递给被调用函数,因此被调用函数不能直接修改主调函数中的变量的值

  

5.3 指针与数组

通过数组下标所能完成的任何操作都可以通过指针来实现一般来说,用指针编写的程序比用数组编写的程序执行速度快在计算数组元素a[i]的值时,C语言实际上先将其转换为 *(a+i)的形式,然后再进行求值,因此在程序中这两种形式是等价的pa[i] = *(pa+i)一个通过数组和下标实现的表达式可等价地通过指针和偏移量实现数组名和指针之间有一个不同之处.指针是一个变量当把数组名传递给一个函数时,实际上传递的是该数组的第一个元素的地址在被调用函数中,该参数是一个局部变量,因此,数组名必须是一个指针,也就是一个存储地址值的变量.

  

5.4 地址算术运算

如果P是一个指向数组中某个元素的指针,那么p++将对p进行自增运算并指向下一个元素,而p+=i 将对p进行加i的增量运算,使其指向p当前所指向的元素之后的第i个元素指针与整数之间不能互相转换,但0是唯一的例外常量0可以赋值给指针,指针也可以和常量0进行比较程序中经常用符号常量NULL代替常量0,这样便于清晰地说明常量0是指针的一个特殊值指针的减法也是有意义的:如果p和q指向相同数组中的元素,且p<q,那么q-p+1就是唯一p和q指向的元素之间的数目指针的算术运算具有一致性:如果处理的数据类型是比字符型占据更多存储空间的浮点类型,并且p是一个指向浮点类型的指针,那么p++后,p将指向下一个浮点数的地址有效的指针运算包括相同类型指针之间的赋值运算;
指针同整数之间的加法或减法运算
指向相同数组中元素的两个指针之间的减法或比较运算;
将指针赋值为0或指针与0之间的比较运算其他所以形式的指针运算都是非法的

  

5.5 字符指针与函数

字符串常量是一个字符数组在字符串的内部表示中,字符数组以空字符'\0'结尾,所以,程序可以通过检查空字符找到字符数组的结尾.字符串常量占据的存储单元也因此比双引号的字符数大1

  

5.6 指针数组以及指向指针的指针

指针本身也是变量,所以它们也可以像其他变量一样存储在数组中

  

5.7 多维数组

C语言提供了类似于矩阵的多维数组,但实际上它们并不像指针数组使用的那样广泛

  

5.8 指针数组的初始化

5.9 指针与多维数组

对于初学者来说,很容易混淆二维数组与指针数组之间的区别int a[10][20];int *b[10];从语法上讲,a[3][4]和b[3][4]都是对一个int对象的合法引用

但是a是一个真正的二维数组,它分配200个int类型的长度存储空间

对b来说该定义仅仅分配了10个指针,并且没有对他们初始化,它们的初始化必须以显示的方式进行,比如静态初始化或通过代码初始化

指针数组的另一个优点在于,数组的每一行长度可以不同

指针数组最频繁的用处是存放不同长度的字符串

  

5.10 命令行参数

在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序.调用主函数main时,它带有两个参数第一个参数不是运行时命令行参数的个数(argc)第二个参数是一个指向字符串数组的指针,其中每个字符串对应一个参数

UNIX系统中C语言程序有一个公共的约定:以负号开头的参数表示一个可选标志或参数.假定用-X 表示打印所以与模式不匹配的文本行,用-n表示打印行号

  

5.11 指向函数的指针

在C语言中,函数本身不是变量,但可以定义指向函数的指针这种类型的指针可以被赋值 存放在数组中,传递给函数以及作为函数的返回值等//指向函数的指针
int (*comp)(void *,void *);*comp代表一个函数

  

5.12 复杂声明

C语言的声明不能从左至右阅读,而且使用了太多的圆括号int *f();//f是一个函数,它返回一个指向int类型的指针int (*pf)(); //pf是一个指向函数的指针,该函数返回一个int类型的对象它们之间的含义差别说明,*是一个前缀运算符,其优先级低于(),所以声明中必须使用圆括号以保证正确的结合顺序

  

转载于:https://www.cnblogs.com/dafume/p/7801063.html

《C程序设计语言》笔记 (五) 指针与数组相关推荐

  1. c语言中数组的概念及作用,详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  2. c语言数组实际作用,要玩转C语言 就要深入指针和数组这两个概念

    原标题:要玩转C语言 就要深入指针和数组这两个概念 指针 预备知识 在深入理解指针之前,我认为有必要先复习或者学习一下计算机原理的基础知识. 计算机是如何从内存中进行取指的? 计算机的总线可以分为3种 ...

  3. C程序设计语言--第五章:指针与数组

    为什么80%的码农都做不了架构师?>>>    指针是一种保存变量地址的变量. 5.1 指针与地址 通常的机器都有一系列连续编号或编址的存储单元,这些存储单元可以单个进行操纵,也可以 ...

  4. IOS笔记-C语言中的指针与数组

    1.指针与数组 1)指针与一维数组 i.数组指针(指向数组元素的指针) 类型  *指针变量名: 指针定义完成后要初始化(不想让指向任何内容,=0,=NULL) int a[10]; int *p =  ...

  5. 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二

    文章目录 1 数组的访问方式 1.1 数组的访问方式代码分析 2 数组和指针不同 3 a 和 &a 的区别 3.1 指针运算的经典代码案例分析 4 数组作为函数的参数 4.1 数组作为函数参数 ...

  6. C语言杂谈:指针与数组 (上) (转)

    转自:http://blog.jobbole.com/86400/ 介绍 1> 指针定义:指针是保存变量地址的变量. 2> 本文重点 >> 指针与数组之间的关系 >> ...

  7. c语言冒泡排序数组指针,c语言冒泡排序,指针,数组

    冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复 ...

  8. 国2c语言中指针与数组的赋值运算,C语言到汇编-指针与数组2

    本章剩下的内容主要有: 1.指针与数组 & 地址算术运算 2.字符指针与函数 3.多维数组 & 指针与多维数组 4.指向函数的指针 每个内容举一个例子,第一个例子: int a[10] ...

  9. c语言中通过指针引用数组,C语言基础(二)

    指针引用数组 C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素. 引入指针变量后,就可以用两种方法来访问数组元素了.如果p的初值为&a[0],则: p+i和 ...

最新文章

  1. base64是哪个jar包的_如何通过一个类名找到它属于哪个jar包?
  2. 个人申请并部署阿里云免费Symantec SSL过程浅谈
  3. Angular self study 3 - data binding
  4. 单自由度系统的振动的幅频特性曲线及相频特性曲线及matlab分析,实验四 线性系统的频域分析...
  5. 【BZOJ3684】大朋友和多叉树【生成函数】【拉格朗日反演】【多项式幂函数】
  6. 企业文件存储服务器规划,企业文件存储服务器
  7. 教你如何在Mac上搭建自己的服务器——Nginx
  8. C语言中二级指针的作用
  9. 如何进阶一名有竞争力的程序员?
  10. TYVJ1467 通往聚会的道路
  11. “Hello World!”团队第五周第五次会议
  12. python opencv 识别角度_opencv python 角点检测/FAST算法
  13. idea展现目录清晰方式
  14. java 图片自适应_水印宽高比例自适应图片(Java-Thumbnails)
  15. C++实现建立和一二进制树的三个递归遍历
  16. mysql数据库反弹端口连接提权
  17. Android studio 如何连接手机
  18. Spring和Quartz实现的定时任务调度
  19. 微信公众号每日早安推送,给女朋友的浪漫礼物
  20. 从易经看程序员的职业人生:乾卦--天行健,君子以自强不息

热门文章

  1. python大作业爬虫_爬虫大作业
  2. C++笔记-利用远程线程注入获取PC版微信个人昵称
  3. C++笔记-shared_ptr与weak_ptr需要注意的地方
  4. Java Socket笔记-udpSocket简单收发包
  5. Qt工作笔记-QGraphics框架中,给图像中的点连线【获取场景中的数据】【有坑】
  6. C/C++获取CPU相关信息(非WMI)
  7. 微机个人笔记-半导体存储器(芯片的角度)概述
  8. 动态调用object php,PHP动态调用,大家都来谈吧
  9. java 执行shell 卡住_Aid learning/Termux之Jupyter的Java编程高级篇——包管理
  10. python控制流水灯_B站智能防挡弹幕的一种python实现