第21课 - 指针基础

口诀:加*符号变大门

  1. 变量回顾

既然程序中的变量只是一段储存空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?我们看下面的例子:

#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;

}

我们会看到,两次i的值分别是5和10。也就是说,即使变量是一段储存空间的别名,但是我们要改变它的内容(通过指针),也不一定非得通过这个别名来改变。也就是说*p = 10;等价于i = 10。

  1. 指针的本质

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

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

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

下面我们来思考:不同类型的指针占用的空间内存大小相同吗?

答:指针是用来保存地址的,所以指针的大小是一定的,和你运行的系统有关和类型无关。但是不同类型的指针,指向不同的内容。

  1. *号的意义

(1)在指针声明时,*号表示所声明的变量为指针。

(2)在指针使用时,*号表示取指针所指向的内存空间中的值。

*号类似医院吧钥匙,通过这把钥匙可以打开内存,读取内存中的值,例程:

#include <stdio.h>

int main()

{

int i;

int* pI;

char* pC;

float* pF;

pI = &i;

*((int*)0X18FF44) = 100;

//这行程序进行了强制的类型转换,18FF44相当于pI的地址,也相当于一扇大门(凡是指针都相当于大门),我们在前面加*,就等于打开了这扇大门。给它复制,我们就相当于给i赋值。

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;

}

  1. 传值调用与传址调用

(1)函数调用的本质是将实参值复制到形参。

(2)传值调用中实参、形参为各自函数的局部变量,则形参在函数内数值变化不会影响外部实参的变化。

(3)传址调用中将复制的指针,故形参、实参的地址一样,形参的变化即实参的变化。

(4)当一个函数体内部需要改变实参的值,则需要使用指针参数。外,指针适用于复杂数据类型作为参数的函数中。

例子:利用指针实现数据的交换。

(1)通过宏定义

#include<stdio.h>

#define SWAP(a,b){int t=a;a=b;b=t;}

int main()

{

int i = 2;

int j = 3;

printf("%d,%d\n",i,j);

SWAP(i,j);

printf("%d,%d\n",i,j);

return 0;

}

(2)通过函数

#include<stdio.h>

void SWAP(int *a,int *b)

{

int i = 0;

i = *a;

*a = *b;

*b = i;

}

int main()

{

int i = 2;

int j = 3;

printf("%d,%d\n",i,j);

SWAP(&i,&j);

printf("%d,%d\n",i,j);

return 0;

}

转载于:https://www.cnblogs.com/free-1122/p/9758881.html

C语言-第21课 - 指针基础相关推荐

  1. 云小课 | MRS基础入门之HDFS组件介绍

    摘要:HDFS是MapReduce服务中的基础文件系统,全称为Hadoop的分布式文件系统(Hadoop Distributed File System),可支持实现大规模数据可靠的分布式读写. 本文 ...

  2. 快学 Go 语言 第 3 课 —— 分支与循环

    程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过.它并不是什么严格的数据公式,它只是对一般程序的简单认知.数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化 ...

  3. C语言指针基础知识点(六)--通过指针引用多维数组

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  4. 【C语言学习】国嵌21__指针基础

    2019独角兽企业重金招聘Python工程师标准>>> 一.指针基础 变量只是一段存储空间的别名,那么是不是必须通过这个别名才可以使用这段存储空间?答案是否定的.我们还可以通过指针也 ...

  5. C语言指针基础知识点(四)--通过指针引用数组

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  6. C语言指针基础知识点(七)--通过指针引用字符串

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  7. 重温C语言 | 指针基础(指针与内存)

    C语言在编译之后会以三种形式使用内存静态/全局内存 静态/全局内存 静态声明的变量分配在这里,全局变量也使用这部分内存.这些变量在程序开始运行时分配,直到程序终止才消失.所有函数都能访问全局变量,静态 ...

  8. C语言指针基础与深入

    目录 1.指针定义 1.1指针定义 1.2'*'的含义 1.3'&'的含义 1.4'*'与'&'的联用,'*&'.'&*'是否相同 1.5'[ ]'的解引用功能 2.指 ...

  9. 【C语言】指针基础知识点汇总

    指针(一) 基础 一 指针的概念 为了方便访问内存中的内容,给每个内存单元一个编号,我们称这个编号为地址,及为指针. 指针也是一种数据类型 所以指针都有自己的内存 存储的是地址(编号) 指针的四要素 ...

最新文章

  1. nofollow标签_网站nofollow标签的应用 - 最蜘蛛池博客
  2. android x86 vulkan,【图片】预告贴,准备同步AndroidIA源码,貌似支持Vulkan【androidx86吧】_百度贴吧...
  3. 大前端开发者需要了解的基础编译原理和语言知识
  4. 提高PHP编程效率的20个要点(转)
  5. 12、mybatis返回map单条及多条记录
  6. VMware vCenter Server6.5安装及群集配置介绍
  7. tomcat GET 编码疑惑
  8. 怎么在win7链接无线网络连接服务器,Win7系统网络连接一直显示正在获取网络地址但是连不上网解决方法...
  9. ControllerChannelManager分析
  10. Like rlike在hive中的区别
  11. auto和decltype的用法总结
  12. 有东西,可以倚老卖老,可以倚少卖少
  13. 开源软件的总拥有成本指南
  14. zip压缩文件内中文名字符编码解压乱码问题
  15. 使用smartping监控服务器的网络可用性
  16. 快速解决win7系统Aero主题无法使用
  17. C语言常用的数学函数
  18. 小牛电动Q2财报:国外不乐观,国内狂下沉
  19. iOS比较常用的第三方及实例(不断更新中)
  20. 2021-07-31-DJ-009 Django模板页面的继承与定制,一个Base.html,仿制漂亮的效果

热门文章

  1. UIButton和UIimageView
  2. Spring--Quartz 任务调度的配置详解
  3. SQL Server 数据库的整理优化的基本过程(三)
  4. 《CLIP2Video》-腾讯PCG提出CLIP2Video,基于CLIP解决视频文本检索问题,性能SOTA!代码已开源!...
  5. 样本量很少如何获得最佳的效果?最新小样本学习工具包来啦!
  6. 图像编辑新作:连续色彩迁移
  7. OpenCV 发起 Spatial AI挑战赛
  8. 王者归来!C语言击败Python勇夺“2019年度编程语言”冠军
  9. Python爬虫中最重要、最常见、一定要熟练掌握的库
  10. 【TensorFlow】TensorFlow从浅入深系列之十一 -- 教你深入理解卷积神经网络中的卷积层