C语言-第21课 - 指针基础
第21课 - 指针基础
口诀:加*符号变大门
- 变量回顾
既然程序中的变量只是一段储存空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?我们看下面的例子:
#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。
- 指针的本质
l 指针在本质上也是一个变量
l 指针需要占用一定的内存空间
l 指针用于保存内存地址的值
下面我们来思考:不同类型的指针占用的空间内存大小相同吗?
答:指针是用来保存地址的,所以指针的大小是一定的,和你运行的系统有关和类型无关。但是不同类型的指针,指向不同的内容。
- *号的意义
(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)函数调用的本质是将实参值复制到形参。
(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课 - 指针基础相关推荐
- 云小课 | MRS基础入门之HDFS组件介绍
摘要:HDFS是MapReduce服务中的基础文件系统,全称为Hadoop的分布式文件系统(Hadoop Distributed File System),可支持实现大规模数据可靠的分布式读写. 本文 ...
- 快学 Go 语言 第 3 课 —— 分支与循环
程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过.它并不是什么严格的数据公式,它只是对一般程序的简单认知.数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化 ...
- C语言指针基础知识点(六)--通过指针引用多维数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- 【C语言学习】国嵌21__指针基础
2019独角兽企业重金招聘Python工程师标准>>> 一.指针基础 变量只是一段存储空间的别名,那么是不是必须通过这个别名才可以使用这段存储空间?答案是否定的.我们还可以通过指针也 ...
- C语言指针基础知识点(四)--通过指针引用数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(七)--通过指针引用字符串
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- 重温C语言 | 指针基础(指针与内存)
C语言在编译之后会以三种形式使用内存静态/全局内存 静态/全局内存 静态声明的变量分配在这里,全局变量也使用这部分内存.这些变量在程序开始运行时分配,直到程序终止才消失.所有函数都能访问全局变量,静态 ...
- C语言指针基础与深入
目录 1.指针定义 1.1指针定义 1.2'*'的含义 1.3'&'的含义 1.4'*'与'&'的联用,'*&'.'&*'是否相同 1.5'[ ]'的解引用功能 2.指 ...
- 【C语言】指针基础知识点汇总
指针(一) 基础 一 指针的概念 为了方便访问内存中的内容,给每个内存单元一个编号,我们称这个编号为地址,及为指针. 指针也是一种数据类型 所以指针都有自己的内存 存储的是地址(编号) 指针的四要素 ...
最新文章
- nofollow标签_网站nofollow标签的应用 - 最蜘蛛池博客
- android x86 vulkan,【图片】预告贴,准备同步AndroidIA源码,貌似支持Vulkan【androidx86吧】_百度贴吧...
- 大前端开发者需要了解的基础编译原理和语言知识
- 提高PHP编程效率的20个要点(转)
- 12、mybatis返回map单条及多条记录
- VMware vCenter Server6.5安装及群集配置介绍
- tomcat GET 编码疑惑
- 怎么在win7链接无线网络连接服务器,Win7系统网络连接一直显示正在获取网络地址但是连不上网解决方法...
- ControllerChannelManager分析
- Like rlike在hive中的区别
- auto和decltype的用法总结
- 有东西,可以倚老卖老,可以倚少卖少
- 开源软件的总拥有成本指南
- zip压缩文件内中文名字符编码解压乱码问题
- 使用smartping监控服务器的网络可用性
- 快速解决win7系统Aero主题无法使用
- C语言常用的数学函数
- 小牛电动Q2财报:国外不乐观,国内狂下沉
- iOS比较常用的第三方及实例(不断更新中)
- 2021-07-31-DJ-009 Django模板页面的继承与定制,一个Base.html,仿制漂亮的效果
热门文章
- UIButton和UIimageView
- Spring--Quartz 任务调度的配置详解
- SQL Server 数据库的整理优化的基本过程(三)
- 《CLIP2Video》-腾讯PCG提出CLIP2Video,基于CLIP解决视频文本检索问题,性能SOTA!代码已开源!...
- 样本量很少如何获得最佳的效果?最新小样本学习工具包来啦!
- 图像编辑新作:连续色彩迁移
- OpenCV 发起 Spatial AI挑战赛
- 王者归来!C语言击败Python勇夺“2019年度编程语言”冠军
- Python爬虫中最重要、最常见、一定要熟练掌握的库
- 【TensorFlow】TensorFlow从浅入深系列之十一 -- 教你深入理解卷积神经网络中的卷积层