2019独角兽企业重金招聘Python工程师标准>>>

一、指针基础

变量只是一段存储空间的别名,那么是不是必须通过这个别名才可以使用这段存储空间?答案是否定的。我们还可以通过指针也就是地址的方式来访问某段存储空间。

#include <stdio.h>int main()
{int i = 5;int* p = &i;printf("%d, %08X\n", i, p);*p = 10;printf("%d, %08X\n", i, p);return 0;
}

运行结果:

5, 0022FF48
10, 0022FF48

2、指针的本质

# 指针在本质上也是一个变量

# 指针需要占用一定的内存空间

# 指针用于保存内存地址的值

不同类型的指针占用内存空间的大小相同。

#include <stdio.h>int main()
{int i;int* pI;char* pC;float* pF;pI = &i;*((int *)0x22ff4c) = 100; printf("%0X, %0X, %d\n", pI, &i, i);printf("%d, %d, %0X\n", sizeof(int*), sizeof(pI), &pI);printf("%d, %d, %0X\n", sizeof(char*), sizeof(pC), &pC);printf("%d, %d, %0X\n", sizeof(float*), sizeof(pF), &pF);return 0;
}

运行结果:

22FF4C, 22FF4C, 100
4, 4, 22FF48
4, 4, 22FF44
4, 4, 22FF40

程序实现的功能:1、指针占用的内存空间2、指针的地址3、通过*号写内存

*号的意义

# 在指针声明时,*号表示所声明的变量为指针

# 在指针使用时,*号表示取指针所指向的内存空间中的值。*号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值

# “*”还代表乘号

3、传值调用与传址调用

# 指针是变量,因此可以声明指针参数

# 当一个函数内部需要改变实参的值,则需要使用指针参数

# 函数调用时实参值将复制到形参

# 指针适用于复杂数据类型作为参数的函数中

利用指针实现变量交换函数:

#include <stdio.h>#define SWAP(a, b) {int t = a; a = b; b = t;} //宏定义也可以实现变量交换void swap(int *a, int *b) //函数定义实现变量交换
{
int t = *a;
*a = *b;
*b = t;
}int main()
{
int i = 1;
int j = 9;printf("%d, %d \n", i, j);swap(&i, &j);printf("%d, %d\n", i, j);return 0;
}

4、常量与指针

# const int *p;       //p可变,p指向的内容不可变

# int const *p;       //p可变,p指向的内容不可变

# int *const p;     /p不可变,p指向的内容可变

# const int * const p;  //p和p指向的内容都不可变

记忆口诀:左数右指

当const出现在*号左边时指针指向的数据为常量,当const出现在*后右边时指针本身为常量

指针小结:

# 指针是C语言中一种特别的变量

# 指针所保存的值是内存的地址

# 可以通过指针修改内存中的任意地址内容

转载于:https://my.oschina.net/u/141132/blog/265535

【C语言学习】国嵌21__指针基础相关推荐

  1. 国嵌c语言深度,国嵌C语言3部全

    课程目录: 国嵌 C语言深度剖析班: 1课-基本数据类型分析 2 auto,register,static分析 3 if,switch,do,while,for分析 4 goto,void,exter ...

  2. 国嵌c语言深度,国嵌C语言深度剖析班(第一期)-国嵌

    国嵌C语言深度剖析班(第一期)共20个课程,包含源码及教程,主要讲了基本数据类型分析.auto,register,static分析.if,switch,do,while,for分析等,本教程提供1-5 ...

  3. go语言学习初探(二)基础语法

    变量声明 var v1 int var v2 string var v3 [10]int var v4 []int var v5 struct {f int } var v6 *int var v7 ...

  4. C 语言学习笔记(二):编程基础

    目录 一.冯诺依曼模型 二.程序语言发展历史 三.进制 3.1 二进制 3.2 八进制 3.3 十六进制 3.4 进制转换:二进制.八进制.十六进制.十进制之间的转换 3.4.1 将二进制.八进制.十 ...

  5. 学习国嵌嵌入式视频笔记

    本文中使用到的datasheet都来自国嵌开发板光盘,笔记也都摘抄自光盘视频 S5PV210_UM_REV1.1.pdf S5PV210_iROM_ApplicationNote_Preliminar ...

  6. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  7. 【C语言学习笔记】26. 指针(3)指向指针的指针、传递指针给函数

    前言 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.通常,一个指针包含一个变量的地址.当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置. ...

  8. C语言学习笔记----4(指针)

    文章目录 指针深入介绍 指针类型 二级指针 字符指针 指针数组 数组指针 函数指针 函数指针数组 函数指针数组指针 回调函数 总结 指针深入介绍 众所周知,亚里士多德1撑起了古希腊科学.哲学的半壁江山 ...

  9. C语言学习(五)——指针

    Ps:相信学过C语言的同学都知道,指针是C语言中最重要也是最难攻克的部分,下面的代码中的注释部分请同学们要仔细阅读 一.指针&指针变量 #include<stdio.h> #inc ...

最新文章

  1. C指针6:指针变量作为函数参数
  2. VS2017使用过程中得到的一些技巧方法和注意点
  3. Uipath 学习栏目基础教学:8、uipath 屏幕抓取获取文本
  4. FMDB/SQLCipher数据库管理
  5. linux uname命令参数及用法详解--linux查看系统信息命令
  6. 如何提高数据分析的效率
  7. 如何让遮罩层悬浮在object标签中
  8. 电商扣减库存_电商后台产品经理宝典
  9. Matlab神经网络(一)
  10. 异步实现商品详情页查询
  11. uni-app中使用HTML5 Plus
  12. 沐风微信营销水库模型二:建设专属秘密武器库!
  13. 互不相容的零缺陷与全面质量管理
  14. 大小限制_微信传文件有大小限制怎么办?教你3秒把100MPPT压缩成10M
  15. 从Office 2010的华丽转型看微软的战略野心
  16. Visp系列学习二:visp显示和visp_ros获取图像
  17. 计算机网络概述——计算机网络
  18. 什么是GIS,GIS的基本功能是什么?
  19. FFMPEG -- av_guess_format
  20. 强化学习待解决问题和主流Trick整理

热门文章

  1. Java 并发编程—核心理论
  2. 一个有趣的python排序模块:bisect
  3. Java中的Runtime类详解
  4. Java小数中的四舍五入
  5. Linux 关闭与重启
  6. Oracle创建 表空间 用户 给用户授权命令
  7. OpenStack三种类型的NAT转换
  8. SSM整合项目中使用百度Ueditor遇到的问题。
  9. 正则表达式 非捕获性分组
  10. JSTL标签引入(web基础学习笔记十八)