c语言的几点心得,变量的深入理解
// 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));
}