zoukankan      html  css  js  c++  java
  • c语言的几点心得,变量的深入理解

    查看文章
    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));


    }


  • 相关阅读:
    如何判断某个变量是否是数组?
    mac vscode编辑器的快捷键
    vue require.context()动态文件引入
    在vue项目上使用less
    nrm是什么
    对象的扩展方法
    es5严格模式
    微信公众号定位不准问题
    layer使用iframe的路径不对问题
    form表单中reset对js赋值的表单象无法重置问题
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124561.html
Copyright © 2011-2022 走看看