详解:取地址操作符(&)及解引用操作符(*)
详解:取地址操作符(&)及解引用操作符(*)
对于指针:我想,应该是多数人的梦魇,包过笔者也一样,之前老是听前辈说过,指针怎么怎么样,怎样难!但是,总归是片面的,不可取的,现在笔者也在刚刚学习到了:指针,所以打算博客一篇,来纪念一下:第一次对于指针的初步认识,及感悟!
首先:我们需要理解指针的两个概念:
数据在内存中的存储:编号----》地址-----》指针
1.指针是内存中最小单元的编号(1个字节),也就是地址!
2.平时口语中所说的指针:通常指的就是指针变量,是用来存放内存地址的变量!
因此:我们对于上述的简单总结为:
指针就是地址,口语中所说的指针,通常指的就是指针变量
指针变量:通过&(取地址操作符)取出变量的内存起始地址,把地址存放在一共变量中,这个变量就是指针变量!
下面来用代码介绍如何打印地址!
#include <stdio.h>
int main()
{
int a = 10;
printf("%p\n", &a); // 用%p来打印地址
return 0;
}
在这里printf("%p\n", &a); // 用%p来打印地址,我们需要着重注意%p是用来打印地址的!
代码的运算结果为:
因为,我们给a赋初始值a=10;将a存储起来就需要一个地址(电脑分配),所以我们可以通过这个地址来找回a的值,这个也是可行的,这个就是需要我们对'&a',进行解引用操作(*),对于解引用操作(*),下面笔者将会进行讲解!因此读者,请稍安勿躁!
对于这个代码,在第150行是不可取的,下面已经给了警告!
虽然运转出来结果了,但是做法是不可取的!
因此,正确的书写规范为:
#include <stdio.h>
int main()
{
int a = 10;
int* pa = &a;
printf("%d\n", *pa);
//printf("%d\n", pa); //错误写法,不可取
return 0;
}
因此,用指针来通过取地址求值时候,需要进行有效的代码!
int a = 10; int* pa = &a; 在这段代码中,笔者希望能够正确理解各个所代表的含义!
对于int*pa=&a,在这句中 int 指向a的类型为int型,*指向pa为指针变量!
同理,对于;char ch; char *pc=&ch;有着一样的解释,根据上面的解释,就能得到该段代码表示的具体意思!
但是,对于 int* pa = &a; 可以写成:int* pa; pa = &a; 因此,上述代码可以写为:
#include <stdio.h>
int main()
{
int a = 10;
int* pa;
pa = &a;
printf("%d\n", *pa);
return 0;
}
代码的运行结果也是一样的!
int* pa; pa = &a;,在该段代码中,我们可以看出来:pa只是一个定义了int类型的指针,( pa = &a)前面并没有任何标识; 但是对于printf("%d\n", *pa);打印结果时候,用了*(解引用操作符)这个跟int*pa=&a;及int *pa;中的表示意义是不一样的!需要多多注意
pa虽然是指针,存放着a的地址,但是pa也有着自己的地址!通过对pa的地址进行解引用操作,也一样可以找到a的值!
#include <stdio.h>
int main()
{
int a = 10;
//int* pa = &a;
int* pa;
pa = &a;
printf("%d\n", *pa);
int** ppa = &pa;
printf("%d\n", **ppa);
return 0;
}
在这个代码里面,将涉及部分二级指针的内容!
代码的运行结果为:
有意者请联系笔者私聊,或者参考读者以后代码!在这里笔者将不再进行涉及二级指针的内容
- 点赞
- 收藏
- 关注作者
评论(0)