博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言的几点心得,变量的深入理解
阅读量:7042 次
发布时间:2019-06-28

本文共 1330 字,大约阅读时间需要 4 分钟。

查看文章
c语言的几点心得,变量的深入理解
2011-04-02 10:34

// datatest.cpp : 定义控制台应用程序的入口点。

//

//时间上 变量名的这个字符串 在内存中是没得被保存的,是通过相应的寄存器来完成的。寄存器相当于一个数据与内存之间的一个桥梁,

//这与变量的作用完全相同。

//如果一定要追问的话,那都把每个变量名当做一个无名的寄存器吧。

//详细过程看汇编原理。

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
 
 char a='a';
 //mov &a 97;寄存器间接寻址。一个变量是一个不存在的寄存器名来保存的。变量a也相当于一个指针。寄存器只相当于一个中间过过 ,与变量的作用完全相同。
  //普通变量名不占用地址,怎么找到这个值 都是连接器的事情了。
 //a是一个寄存器。
 //char b[]={'1','A'};
 char *b=&a;
 char *c="a";

 char **d=&c;

 //指针变量名要单独占一个地址来存储这个变量。
 printf("char%d\n",sizeof(char));
 printf("int bit=%d\n",8*sizeof(int));
 printf("char a is %c\n",a);
 printf("char a 10 %d\n",a);
 printf("char a 16 %#x\n",a);
 printf("&a %#x\n",&a);

 scanf("%c",&c);//scanf 函数找到最后的地址,把数据存放到内存中。

 printf("char c 10 %c\n",c);//打印的是a得地址空间。
 printf("char c 10 %d\n",*c);
 printf("char c 16 %#x\n",c);
 printf("&c %#x\n",&c);//这个打印的C变量名得地址空间,在堆栈段中。
 printf("pooint c %p\n",c);//将对应内存中的值翻译成16进制的数。
 printf("a'sadress-c'address==%d",&a-c);//&a与C中都是放的地址制 ,为啥子不能相运算呢,是以为他们的类型不匹配。
 //指针变量中都存放的是地址值 ,我们为啥子要用不同的类型来声明不同的变量。用一个int类型的值不行吗?答案当然是否定的,
 //这是因为吧这样声明是为了 ,确定所指向的内存单元的数据类型。如果不指明数据类型,是不能够进行运算的,虽然内存中存放的都是01代码。
 //因此指针变量有两个作用。指明地址,声明数据类型。
 //实际CHAR是整形数据类型,里面存放的是01代码 ,只是我们在翻译的过程中,将其翻译成了字符。这也是字符数据与整形数据能进行转换的原理(至少我是这样认为的)
 //printf("%d\n",b[1]);

 //printf("%d\n",*(c+1));

 

}

转载于:https://www.cnblogs.com/yuzaipiaofei/archive/2011/07/19/4124562.html

你可能感兴趣的文章
第1章 Java概述
查看>>
教你搭--高性能缓存服务器varnish
查看>>
IOT物联网观察之5G时代来临,万物互联的全新变革
查看>>
洞悉物联网发展1000问之物联网的最佳入口是什么?
查看>>
Redhat6.5中搭建NFS共享存储服务
查看>>
实现双主模型NGINX架构
查看>>
大快网站:如何选择正确的hadoop版本
查看>>
dhcp snopping及华三交换机配置
查看>>
java基础-IO
查看>>
python多线程之创建线程
查看>>
我的友情链接
查看>>
sersync同步配置
查看>>
Apache2 httpd.conf配置文件中文版详解
查看>>
Apache Shiro学习笔记(二)身份验证JdbcRealm
查看>>
主机监控shell脚本
查看>>
SharePoint 2013 部署 Part 4
查看>>
PowerDesigner15 使用时的十五个问题附解决方法
查看>>
马斯洛需求层次理论
查看>>
Integer与int那小点关系
查看>>
bootstrap-面板
查看>>