什么是「普通指针」,普通指针就是指向基本数据类型的指针,比如int 、float等。
我认为实战是最好的理解方式,所以会有代码以及注释详细理解,不过在你看代码之前,你应该知道这些东西:
❝
❞
就和定义一个普通变量一样:类型 *变量名
指针变量接收的是变量的内存地址在C语言中,通过符号&来取出变量的内存地址
赋值也是同样的
那么你知道了这些知识后,就看代码:
#include<stdio.h>
int main()
{
int num = 10;
// 创建一个int类型的变量,并赋值为10
int* pnum;
// 创建一个int类型的指针,你还能这样写 int *pnum
pnum = #
// &num是num在内存空间的内存地址
// 这句代码是将num的内存地址赋值给pnum
printf("num的值为:%d\n&num的值为:%p\n*pnum的值为:%d\npnum的值为:%p",num,&num,*pnum,pnum);
// 将各个值都打印出来看看效果
return 0;
}
运行结果是:
num的值为:10
&num的值为:0xff8effe0
*pnum的值为:10
pnum的值为:0xff8effe0
看了这段代码,是不是对指针有了更深刻的了解了呢?
如果你想学好,就暂停你的进度,思考一下:
❝
❞
思考之后来看看吧~~
那么我们看着代码和运行结果可以总结出以下内容:
接下来,你就想想「你」,你的身份证号,你的身份证,国家信息系统
❝
❞
❝试想,你如果声明一个变量,并将该指针变量的内存地址给该指针,「也就是让指针变量存储的是指针的内存空间」,会有什么事情发生? ❞
思考:我们的指针变量是一个存储内存地址的指针,但他同样也还是一个变量,所以也会在内存中有自己的内存地址,而刚好指针存储的就是变量!!等等等等,一拍即合,我们就把指针的内存赋给指针,看看会发生什么!
上代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int * p;
p = &p;
printf("p=%p\n&p=%p\n*p=%p",p,&p,*p);
return 0;
}
编译结果:
p=0xfff75af4
&p=0xfff75afc
*p=0x0
哦豁,结果清晰可见,我们也因此产生了一些疑惑,为什么会出现两个内存地址呢?
来看看昨晚我与大佬的对话吧~~
在这里插入图片描述
但是当时还是很疑惑为什么会出现了两个内存地址~~
第二天找到了原因!
❝昨天是使用手机敲得C代码,因为那时候还在火车上,没法拿电脑 今天使用了电脑,编译器是gcc,编辑器是vs code 重新编译了一下 ❞
运行结果如下:
p=0061FECC
&p=0061FECC
*p=0061FECC
欸,这就很舒服了,内存地址是一样的,所以虽然安卓有C语言的编译器,但还是使用电脑吧。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。