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));


    }


  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/yuzaipiaofei/p/4124561.html
Copyright © 2011-2022 走看看