转载来自51cto:https://blog.51cto.com/15079723/2595079

指针

计算机位数基本知识:
32位:32根地址线/数据线 正电(0)和负电(1)
32个二进制作为可能性一共2^32种
比如:
00000000000000000000000000000001=1
所对应的是为1的地址
每个小区域(小分区)为1字节

查看变量地址

用%p输出&a的地址
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main(){
int a = 10;
printf("%d\n", a);
printf("%p\n", &a); //输出a的地址 010FFA38 所得为16进制地址
return 0;
}
int p = &a;//p用来存放地址 p,p为指针变量(指针)即地址存到p中
printf("%p\n", &a);
printf("%p\n", p); 两个打印结果相同
:解引用操作符:
*p = 20;//即为把20赋给a
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main(){
int a = 10;
int p = &a;
printf("%d\n", a);//10
p = 20; //a=20
printf("%d\n", a);//20
printf("%d\n", p);//20
return 0;
}
注意:
什么类型的变量与地址类型是对应的
int a; int
p=&a;
char ch; char *p=&ch;

指针变量的大小

在32位中每个指针变量都是32个bit即4个字节
所以:
int a = 10;
int *p = &a;
printf("%d\n", sizeof(p)); //输出为4且无论是int char......都是4
64位指针大小就是8个字节