C语言 day6
指针
指针的概述
- 在32位系统的寻址范围是4G 0x00 00 00 00 ~ 0xff ff ff ff
- 内存是以字节为单位来存储数据的 系统给每个字节分配一个编号 而这个编号就是内存的地址(指针) 所以在32位系统最多只能识别4G的内存
- 内存的地址就是指针 指针就是地址 指针是C语言中给内存的地址起的好听高大上的名字
指针变量
- 指针变量:本质就是一个变量 只是这个变量存放的是内存的地址编号(指针)
- 在32位系统中 任何类型的地址编号都是4字节;在64位系统中 任何类型的地址编号都是8字节。 运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc,char *argv[]){
printf("%d\n",sizeof(char *));
printf("%d\n",sizeof(short *));
printf("%d\n",sizeof(int *));
printf("%d\n",sizeof(long *));
printf("%d\n",sizeof(float *));
printf("%d\n",sizeof(double *));
printf("%d\n",sizeof(double *****));
return 0;
}4 4 4 4 4 4 4
指针变量的定义
步骤:
1、 *修饰 指针变量名
2、 保存啥类型的地址 就用该类型定义一个普通变量
3、 从上往下 整体替换int num;&num
取num变量的空间的起始地址
指正变量使用
通过 p保存的地址空间
进行读写操作
在使用中 *p
取p所保存的地址编号 对应的空间的内容(指针变量p
的解引用)
指针变量的类型
1 |
|
问:*p
是如何取出10的?
指针变量自身的类型:
在定义中,将指针变量名拖黑 剩下啥类型 指针变量就是啥类型
指针变量所指向的类型:
在定义中,将指针变量名和离他最近的一个 *
一起拖黑 剩下啥类型 指针变量就指向啥类型
案例:指针变量取值的宽度
1 |
|
num
在系统中要么是顺着存要么是倒着存,不论是顺着存还是倒着存,放心,他取出来都会自动颠倒过来,如图:
指针变量取值的宽度:指针变量指向类型长度决定。
- 这就是为什么
*p
能取出num
的数据
1 |
|
运行结果:
分析:
指针变量的跨度
指针变量的跨度:指针变量指向类型长度决定。
1 |
|
运行结果:
综合案例:
1 |
|
运行结果: