文章目录
- 了解内存和地址
- 指针变量和地址
- 指针的大小
4.指针变量类型的意义
1.了解内存和地址
内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。
⼀个字节空间⾥⾯能放8个⽐特位,一个比特位可以储存2进制的位1或者0。
1Byte = 8bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
每个内存单元也都有⼀个编号,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。
内存单元的编号=地址=指针
2.指针变量和地址
2.1取地址操作符(&)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{ //利用&获取a的地址
int a = 20;
printf("%p", &a);
return 0;
}
在不同的环境下地址也会不同。
2.2指针变量和解引⽤操作符(*)
通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:00FAFC00,这个数值有时候也是需要存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量中。
#include <stdio.h>
int main()
{
int a = 20;
int * pa = &a;//取出a的地址并存储到指针变量pa中
return 0;
解引⽤操作符(*)。
#include<stdio.h>
int main()
{ //利用&获取a的地址
int a = 20;
int* p = &a;
printf("%d\n", *p);
*p = 10;
printf("%d", *p);
return 0;
}
p是p中存放的地址,改变p相当于改变a的变量。
- 指针的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%zd\n", sizeof(int*));
printf("%zd\n", sizeof(char*));
printf("%zd\n", sizeof(float*));
printf("%zd\n", sizeof(double*));
printf("%zd\n", sizeof(short*));
return 0;
}
X86环境输出结果:
X64环境输出结果:
4.指针变量类型的意义
其实指针类型是有特殊意义的,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。
int main()
{
int a = 20;
int* pi = &a;
char* pc = (char *)&a;
printf("%p\n", &a);
printf("%p\n", pc);
printf("%p\n", pc+1);
printf("%p\n", pi);
printf("%p\n", pi+1);
}
后续将持续更新“深入了解指针”系列(⑅•͈ᴗ•͈).:*♡