指针

指针:
1.内存
计算机中最小的单位是 bit位
最小的的存储单位是 byte字节 1字节=8位;
2.变量
2.1 定义变量
类型名 变量名
2.2 引用
使用变量就是使用变量名绑定的内存段
3 地址与首地址
地址:在计算机中每一个字节都有一个与之相匹配的编号
首地址:变量的第一个地址
4 指针
首地址就是指针
在内存中我们的地址是连续的,所以意味着知道了变量的首地址,知道了
变量的类型,就可以确定对应内存的段的值,所以我们把首地址称之为指针
5 指针变量
如果我们再次开辟内存,用来保存指针,我们就把这个开辟的内存
绑定的变量称之为指针变量
int main()
{
int x=10086;
//&x 他是一个x的变量的首地址,也称之为指针
int p //p就是一个指针类型的变量
}
6 指针大小
int p;
char p1;
float p2;
double
p3;
printf("int=%d\n",sizeof(int)); //int=4
printf("char=%d\n",sizeof(char)); //char=1
printf("float=%d\n",sizeof(float )); //float=4
printf("double=%d\n",sizeof(double )); //double=8
//32个0 最大32个1 0-32个1
//64个0 最大64个1 0-64个1
//编译器环境有关:4字节32位,8字节64位
printf("int
=%d\n",sizeof(int
)); //int
=8
printf("char=%d\n",sizeof(char)); //char=8
printf("float
=%d\n",sizeof(float)); //float=8
printf("double=%d\n",sizeof(double)); //double*=8

printf("p=%d\n",sizeof(p)); //p=8
printf("p1=%d\n",sizeof(p1)); //p1=8
printf("p2=%d\n",sizeof(p2)); //p2=8
printf("p3=%d\n",sizeof(p3)); //p3=8

7 解引用
知道变量名p,就知道p绑定的内存段中保存的地址&x,
就能够去操作&x指向的内存段
int main()
{
int x=10086;
intp=&x;
printf("%d\n",
p); // 10086
printf("%#X\n",p);// p为x变量的首地址
return 0;
}

8 野指针
指针指向未知的内存空间,我们把这样的指针称为野指针
int*p=&x;
p=10086;
printf("%d",
p);//会报错 "使用未初始化的局部变量p"

int *p=0x1234; //我可复制
p=10086; //我没有修改的权限
printf("%d",
p); //运行出来什么都没有

9 空指针
int*p=NULL; NULL/空/0

int x=10086;
int*p=NULL;
p=&x;
if(NULL!=p){
P=100;
}
else{
printf("这是一个空指针\n");
}
printf("%d\n",
p);//10086

10 万能指针
void* 定义的指针变量,就是万能指针
int x=10086;
char b=‘A';
intp=&x;
void
=&b;

11 多级指针
//解引用与&取首地址符号一 一对应
int x=10086;
int
p=&x; //p是x变量的首地址
int** q=&p;//q表示的是p指针的首地址
//q表示的指针p里面的内容
//**q表示的才是x里面的内容
printf("q=%#X\n",q); // q=0X2FDEF628
printf("&p=%#X\n",&p); //&p=0X2FDEF628
printf("-----------------------\n");
printf("
q=%#X\n",q); //q=0X2FDEF628
printf("&x=%#X\n", &x); //&x=0X2FDEF628
printf("p=%#X\n",p); //p=0X2FDEF628
printf("-----------------\n");
printf("q=%d\n",q); //**q=10086
printf("X=%d\n",x); //x=10086
printf("p=%d\n",p); //*p=10086

posted @ 2020-10-22 14:35  哈哈#  阅读(39)  评论(0)    收藏  举报