提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言:
在C语言中指针是一个很重要的部分,下面由我简单介绍一下指针,希望
帮助大家的
一、内存和地址
1.1在讲之前先举一个例子,假设一共有100个房间,没有编号,把你朋友放到其中一个房间里面,你找到他只能通过一个一个房间里去找,会非常麻烦,如果把其中的房间编上号码,直接让他告诉你号码是不是一下子定位就找到了。
然而我们知道计算机在处理数据的时候会放在内存中读取,处理后的数据也放回内存中;其实也就相当于把内存分为一个内存单元,每个内存单元的大小取一个字节。
首先我们看一下计算机常见的单位
1 bit- 比特位 1Byte=8bit
2 Byte- 字节 1KB=1024Byte
3 KB 1GB=1024MB
4 GB 1TB=1024GB
5 TB 1PB=1024TB
6 PB
每个内存单元相当于一个学生宿舍,一个字节能放8个比特位。
生活中我们把门牌号叫做地址,在计算机中把内存单元的编号也称为地址,在C语言中有一个新名字叫-指针
所以说:内存单元的编号==地址==指针
二、指针变量和地址
2.1取地址操作符(&)
#include <stdio.h>
int main()
{
int a=10;
return 0;
}
列如上述代码就是创建整形变量a,内存中存放整数10,其中每个字节都有地址。
那我们该如何得到a的地址呢
#include <stdio.h>
int main()
{
int a = 10;
&a;//取出a的地址
printf("%p\n", &a);
return 0;
}
这样就可以打印了打印结果如下
2.2.1指针变量
我们通过取地址操作符中拿到地址是一个数值,数值有时候也要存储起来,所以这个值放在哪里呢-当然是指针变量中
比如:
#include <stdio.h>
int main()
{
int a = 10;
int * pa = &a;//取出a的地址并存储到指针变量pa中
return 0;
}
指针也是一种变量,这种变量就是用来存放地址
那我们该如何拆解呢:*相当于pa是指针变量,int说明pa指向的是整形int
2.2.2解引用操作符
#include <stdio.h>
int main()
{
int a = 100;
int* pa = &a;
*pa = 0;
return 0;
}
第六行 就使⽤了解引⽤操作符, *pa 的意思就是通过pa中存放的地址,找到指向的空间,
*pa其实就是a变量了;所以*pa = 0,这个操作符是把a改成了0.
2.3指针变量的大小
如果指针变量是⽤来存放地址的,那么指针变量的⼤⼩就得是4个字节的空间才可以。
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char *));
printf("%zd\n", sizeof(short *));
printf("%zd\n", sizeof(int *));
printf("%zd\n", sizeof(double *));
return 0;
}
在x86环境下
结论:32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的