为什么C语言要有指针

1.首先写一个取元素地址的代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int  a;
    a=10;
    
    int  *p;
    p=&a;
    
    printf("a的地址是:%p\n",p);
    
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
这里a的地址是系统随机分配的

2.能不能让a(10),强制保存在我要的地址

在0x0060ff00 地址当中存放一个10
(强制在一个地址当中写入自己想写入的数据)

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int  a;
    a=10;
    
    int  *p;
    p=&a;
    
    printf("a的地址是:%p\n",p);
    
   int  *p2=(int *) 0x0060ff00;
       //把16进制的地址强制转换成整型
     //这里当中的p2指向地址
    *p2=10;
    printf("在内存的%p位置,存放值是%d\n",p2,*p2);
     
   	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
3.volatile引入

寄存器比内存更靠近CPU,所以寄存器访问数据的速度比内存访问的速度更快。

引入volatile:
目前写的程序都是单线程

例如对a进行访问,将a拷贝一份给寄存器,换句话说,将内存int a=10;拷贝一份给寄存器,下一次CPU对a进行访问的时候,不从内存访问,直接在寄存器中执行,这样的访问速度就快了许多;如果把a的值发生改变,a=11,自动的把11这个数据,更新到寄存器当中。

volatile的正规说法(引入一篇CSDN的博文当中的一段话)

在本次线程内,当读取一个变量时,为了提高读取速度,编译器进行优化时有时会先把变量读取到一个寄存器中;以后,再读取变量值时,就直接从寄存器中读取;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以保持一致。

当变量因别的线程值发生改变,上面寄存器的值不会相应 改变,从而造成应用程序读取的值和实际的变量值不一致。
当寄存器因别的线程改变了值,原变量的值也不会改变,也会造成应用程序读取的值和实际的变量值不一致。

——@上官可编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值