目录
指针初级
指针的概念
指针类型
指针类型长度
指针的定义
通过指针访问数据
p+1和*p+1的区别
指针做函数参数
上一篇复习了8道编程题,这篇开始正式复习之指针!
说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。
这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。
注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!
vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。
我们正式开始:
指针初级
指针的概念
指针是什么?起什么作用?
指针是变量的一种,里面是一个地址,通过这个地址找到要找的数据。
实质:内存的地址就是指针内容。
指针类型
如何保存变量 a 的地址 0x1000?
地址0x1000也是一种数据,和整数 1 需要整型来保存一样,地址 0x1000 需要指针来保存(即指针类型,类似于char型,int型)。
指针类型有:int*, char*, short*, long*, float* , double*......
保存int型变量的地址,用int*;保存char型变量的地址,用char*,其他类型的变量一样的道理。
注:打印指针/地址用的占位符是%p
指针类型长度
问题来了,int型变量一般占4个字节,char型变量一般占1个字节,那指针类型的变量占几个字节呢?
记住一句话:
所有类型的指针,在64位系统中,都占8个字节。注意!只要是指针!只要是64位的系统,都是8个字节!无论是int*, char*, short*, long*, float* , 还是double*......反正都是8个字节。
因为指针是用来保存地址的,在64位系统中,地址就是64位,在32系统中,地址就是32位,32位是4个字节,64就是8个字节。
指针的定义
定义方式,比如:int* p=#// &是取地址的运算符
通过指针访问数据
访问数据有两种方式:
第一种方式:通过变量名
int num=1;
num=1000;
第二种方式:通过地址
int num=1;
int* p=#//将num的地址取出来存到指针p中
*p=1000;//等价于num=1000,因为p里面存放在num的地址,我们通过num的地址访问了num,修改了里面的数据,*p等价于num。
注:C语言中“*”有两种含义:
如果“*”前面是类型,说明是定义语句,表示后面的变量是一个指针,如int* p=#
如果“*”前面没有东西,说明是使用语句,表示取值,如*p=1000;即取p这个指针指向的这块内存里面的值。
p+1和*p+1的区别
思考1:
int num=1;
int* p=#
p+1结果是什么?
答案是num的地址加了4个字节
由于num是int型,占4个字节,p存放的是num的地址,而num的地址是其首字节的地址,+1就会跳4个字节,这时指针指向的就是num外面的空间。
思考2:
*p+1结果是什么?
答案是2,因为*p等价于num,所以*p+1等价于num+1,结果是2
指针做函数参数
函数参数的传递分为两种:值传递和地址传递,地址传递就是指针。
典型应用:交换两个数字:
void swap(int *x, int *y);
调用:swap(&a,&b);
*x就是a,*y就是b,通过指针间接操作变量a和b
注意:如果要在函数里面修改实参的值,必须要传地址!否则传过去的参数在函数体内运算结束后就被释放掉了,相等于白忙活!
以上就是这篇内容,如想了解更多,欢迎订阅本专栏!
如有问题可评论区或者私信留言,如果想要进交流群请私信!