指针终结者(1)- C语言版

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
//我的电脑内存是8个G所以,就是有80个G的字节
//变量a,b,b,这些变量都是保存在哪里? 在内存里
//内存中的每一个字节都有地址,也就是说80亿个字节就有80亿个地址
//而地址是从零开始编号的,即:第一个字节就是0
//即 地址就是这样编号的:0,1,2,3,4 ...... 80亿
//你可以想象在内存中已经给每个字节编好号了,一个接着一个......,而这就是所谓的地址

    

//每一次执行变量的地址都会在内存中重新分配,所以在黑窗口中的地址可能会不一样

    int a;//那么a变量有4个字节,那么按理说就有4个地址
    int b;
    float c;

//这个*是指针,在这里我们定义了一个变量d,而*说明它是一个指针,而它指向的是一个int类型
    int *d;
//一个指针占用4个字节,但是也分指向的数据类型,比如double就是8个字节
    float *e;//e是一个指针

    char c1,c2,c3,c4,c5;

    int *k;//没有初始化,即指针k里面没有一个有效的数字,我们就去操作的话
    //如果这个k等于这个b的话

    k = &b;
    //当我们使用完了这个指针后,我们可以让他指向另外一个变量
    k = &a;

    d = NULL;//指向d就没有指向任何地址

    /*注意在使用指针的时候一定要注意指针的状态*/
    /*如果没有初始化,那么很明显不能使用*/
    /*但是如果我们把指针让它指向一个有效的地址
      那么就可以使用了,而且使用的时候可以随意的
      更改,当我们我不想让这个指针指向指向任何
      一个地址的时候,我们就使它为null,而null实际上就是0
      但是最好写成NULL,这样更加醒目,
      而且在计算机中0这个地址是不会给我们使用的,
      0的地址所以说非常特殊,我们用的一般是100万
      之后的地址,100万前一般是操作系统占据的 */

    *k = 66;//这里就是修改b的值

    /*如果是这样写的话
    int *k;//没有初始化
    这个k没有指向一个有效的变量
    k = 99;//这样做是不允许的,它不会改掉任何一个字节
    所以上面这个操作是一个无效的操作

    所以指针一定需要初始化,让指针里面要有一个有效的地址,这样后才能使用指针
    */


    c1 = 'a';//一个字符就是一个字节
    c2 = 'b';
    c3 = 'c';
    c4 = 'd';
    c5 = 'e';


    a = 112;
    d = &a;//这里是把a的地址编号赋值给d
    e =  &c;

    b = -1;
    c = 3.14;

    /*把debug换成Release才能准确地看到指针,地址,因为调试状态下,地址是不准确的*/


    //而这个*是间接访问,也叫做解引用指针
    printf("a = %d\n",*d);//通过指针d,间接地访问a

    
    //通过指针间接操作
    *d = 88;//这里修改的变量a,原来是112,现在88;


    printf("a的地址:%d\n",&a);
    printf("d的地址:%d\n",d);

    printf("%d\n",a);
    //打印变量a的地址,&这个标志表示取某个变量的地址
    //首先变量a占用了4个字节,那我们通常把这4个字节的首字节的地址作为变量a的地址
    printf("%d\n",&a);//1703740

    
    printf("%d\n",b);
    //打印变量b的地址
    printf("%d\n",&b);//1703736 它和a的地址刚好相差4个字节
    
    
    printf("%f\n",c);
    //打印变量C的地址
    printf("%d\n",&c);


    //查看刚刚定义的五个字符的地址
    printf("%d\n",&c1);
    printf("%d\n",&c2);
    printf("%d\n",&c3);
    printf("%d\n",&c4);
    printf("%d\n",&c5);

    printf("yes\n");//printf这个函数是在<stdio.h>这个头文件里面

    
    /*由于如果没有system这个函数的话,那么这个黑窗口就会闪一下就退出了*/
    system("pause");//system()这个函数是在<stdlib.h>这个头文件里面

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41998122/article/details/81239372