初识指针
初识指针
-
1.内存
- 1.1计算机中的最小单位是什么???
- bit 位
- 1.2最小的存储单位才是 byte 字节
- 1字节=8位
- 1.3运行的软件 游戏 程序 都是在内存中
一个正在运行的程序我们称之为进程
- 1.1计算机中的最小单位是什么???
-
2.变量
-
2.1 定义变量
int a,b,c; -
2.2 引用变量
int a=10086; printf("%d\n",a)
-
-
3.地址与首地址
-
3.1地址
- 在计算机中每一个字节都有一个与之相匹配的编号我们把它称之为地址.
-
3.2首地址
int x; printf("&x=%#X\n", &x);- 变量的第一个地址就是首地址
-
-
4.指针
- 首地址就是指针
- 在内存中我们的地址是连续的,所以意味着知道了变量的首地址,知道了变量的类型,就可以确定变量对应内存的段的值,所以我们把首地址称之为指针.
- 首地址就是指针
-
5.指针变量
int* p; //p就是一个指针类型的变量 char* p1; float* p2; double* p3; -
6.指针大小
-
操作系统和编译器 操作系统决定上线
编译器决定了你当前所用的环境
32个0 最大32个1 0-32个1
64个0 最大64个1 0-64个1
编译器环境有关:4字节32 8字节64printf("int*=%d\n", sizeof(int*)); //64位=8 32位=4 printf("char*=%d\n", sizeof(char*)); //64位=8 32位=4 printf("float*=%d\n", sizeof(float*)); //64位=8 32位=4 printf("double*=%d\n", sizeof(double*));//64位=8 32位=4
-
-
7.解引用
-
解引用
//知道变量名p,就知道p绑定的内存段中保存的地址&x,就能够去操作&x指向的内存段. int x = 10086; int* p = &x; *p=100; printf("%d\n",x); -
解引用小故事
怎么样才能拿到桌子上的那个东西? 小明从拿到纸条到得到辣条的过程就是解引用! *动作!!! 纸条 p 内容:我把那个东西放到了桌子上!!! &x 桌子 x的内存段 那个东西:一包卫龙辣条 10086
-
-
8.野指针
-
指针指向未知的内存段,我们把这样的指针称之为野指针.
int* p=0x1234; //我可以复制 *p = 10086;//我没有修改的权限 printf("%d", *p); int* p; *p=100;//提示错误 野指针(空指针预防野指针防止内存泄漏)
-
-
9.空指针
int* p=NULL; //NULL==空==0int x = 10086; //野指针会导致内存泄露.... 空指针应运而生 int* p=NULL; p = &x; if (NULL != p) { *p = 100; } else { printf("这是一个空指针!!!\n"); return 0; } printf("%d\n", *p); -
10.万能指针
-
void* 定义的指针变量,就是我们常说的所谓的万能指针.
int a=10086; void* p=&a; printf("%#x\n", *p);
-
-
11.多级指针
- 一般只会用到二级指针(多了无意义!!!)
#include <stdio.h> int main(){ int x = 10086; int* p = &x; //p是x变量的首地址 int** q = &p; //q表示的是p指针的首地址 int*** q1 = &q; printf("q=%#X\n", q); printf("&p=%#X\n", &p); printf("------------------------------\n"); printf("*q=%#X\n", *q); printf("&x=%#X\n", &x); printf("p=%#X\n", p); printf("------------------------------\n"); printf("**q=%d\n", **q); printf("X=%d\n", x); printf("*p=%d\n", *p); //二级 //q1 q的首地址 //*q1 p的指针及p的首地址 //**q1 x这个变量的首地址 //***q1 表示的就是x对应的值 //*q表示的是指针p里面的内容,就是x变量的首地址 //**q表示的才是x里面的内容 return 0; }

浙公网安备 33010602011771号