03 C语言内存修改

一、变量


        前辈,上一节你提到了int和变量,那么变量究竟是什么呢?

        变量嘛,顾名思义,就是随时可以改变的量

        比如说,在上一节写的代码中我们给内存a赋予了"10"这个数值,其实我们还可以随时改变内存a的数值,所以我说a是一个变量

int a = 10 ;    //申请一段内存空间,大小为int,内存名为a,内存的值为10
                //也可以说定义了一个int大小的变量a
a = 20 ;        //变量a的值修改为20

        哦哦!那么我们只要想定义一个变量,就在前面用"int"修饰就行了吧?

        不完全正确哦~实际上,不只是int,我们还可以用short,long,float,double......来定义一个变量哦

        呃呃(w(゚Д゚)w),这些都是什么啊?

        知道整数,小数,负数,字母吗?

        当然知道啊!(恼~当我是弱智吗?QAQ)

        嗯,short,long,float,double......这些关键字,就是用来存储不同类型的数据(整数,小数,负数,字母)的,简称数据类型

        前辈!C语言为什么要有不同的数据类型?所有的变量都是一个万能类型不可以吗?

        理论上当然可以!但是考虑到实际应用,不同类型的数据存储空间是不一样的,有的数据就不需要那么大的存储空间,所以我们给它一个小的存储空间就可以了!

        所以说,使用不同的数据类型可以帮助我们合理规划内存空间,小的数据就放到小的内存里,大的数据就放到大的内存里。

        原来是这样!可以具体讲讲有哪些数据类型吗?

        好的,我们接下来讲解C语言的基本数据类型

二、基本数据类型


        C语言的基本数据类型总结如下表:

        我给你一段代码,用来判断数据类型的大小

//方法一:直接判断数据类型的大小
printf("sizeof(int) = %d\n", sizeof(int)) ;

//方法二:定义一个数据类型的变量,打印这个变量的大小,间接验证数据类型的大小
int a ;   //定义一个int类型的变量a,但不赋值
printf("sizeof(int) = %d\n", sizeof(a)) ;

        其中,sizeof()函数是一个内建函数,用于获取特定类型或对象在内存中的大小。它的参数可以是数据类型或者是一个具体的数据对象。好了,你写代码去验证一下表中所有数据类型的大小吧!

        好的,前辈~我这就去做!

        呼,终于敲完了,果然和表中的数据一模一样!!!

#include <stdio.h>
#include <stdbool.h>     //引入stdbool.h头文件,可以使用bool类型

int main()
{
    printf("sizeof(int)   = %d\n",sizeof(int));
    printf("sizeof(short) = %d\n",sizeof(short));
    printf("sizeof(long)  = %d\n",sizeof(long));
    printf("sizeof(float) = %d\n",sizeof(float));
    printf("sizeof(double)= %d\n",sizeof(double));
    printf("sizeof(char)  = %d\n",sizeof(char));
    printf("sizeof(bool)  = %d\n",sizeof(bool));
    printf("sizeof(void)  = %d\n",sizeof(void));

    printf("sizeof(int*)   = %d\n",sizeof(int*));
    printf("sizeof(short*) = %d\n",sizeof(short*));
    printf("sizeof(long*)  = %d\n",sizeof(long*));
    printf("sizeof(float*) = %d\n",sizeof(float*));
    printf("sizeof(double*)= %d\n",sizeof(double*));
    printf("sizeof(char*)  = %d\n",sizeof(char*));
    printf("sizeof(bool*)  = %d\n",sizeof(bool*));
    printf("sizeof(void*)  = %d\n",sizeof(void*));

    return 0;
}

        干的漂亮!以上的代码充分的验证了C语言常见数据类型的大小,以后不论遇到什么样的数据类型,都可以使用此方法来验证!

三、地址


        诶?~前辈,我看到指针类型int*,short*,long*,float*......的大小怎么都是8个字节?!!

        没错!其实它们不是用来存放数据的,而是用来存放内存的地址的,所谓的地址,就是用来告诉我们,这段内存在整个内存中的位置!比如int*类型,专门存放int类型的地址;float*类型,专门用来存放float类型的地址。

        呃~感觉好抽象啊。。。

        没事儿~我们运行一段代码并进行剖析,你就知道了,用"&"符号可以获取变量的地址

#include <stdio.h>

int main()
{
    int a ;      //定义一个int类型的变量a
    float b ;    //定义一个float类型的变量b

    int* pa = &a ;     //定义一个指针变量pa,给它赋值为变量a的地址
    float* pb = &b ;   //定义一个指针变量pb,给它赋值为变量b的地址

    printf("&a = %p\n", &a) ;    //打印变量a的地址
    printf("pa = %p\n", pa) ;    //打印指针变量pa的值(变量a的地址)

    printf("&b = %p\n", &b) ;    //打印变量b的地址
    printf("pb = %p\n", pb) ;    //打印指针变量pb的值(变量b的地址)

    return 0;
}

        根据上面的实验,我们可以看到,指针变量pa、pb没有自己的数值,而是分别专门存放变量a和变量b的地址。

        由于int和float都是4字节大小,所以变量a的地址和变量b的地址之间,间隔了4个字节。

        啊?指针变量只是用来存放与其同类型变量的地址?也太鸡肋了吧?!?

        NoNoNo其实指针变量可以通过其存放的地址值,间接的获得该地址对应变量的值!这也是指针变量的强大之处!

        什么(捂嘴)?到底怎样做到的啊?

        哈哈!我给你放一段代码就懂了,通过指针变量获取其指向变量的值,需要用到" * "符号

#include <stdio.h>

int main()
{
    int a = 10 ;      //定义一个int类型的变量a,并赋值为10
    float b = 3.14 ;  //定义一个float类型的变量b,并赋值为3.14

    int* pa = &a ;    //定义一个指针变量pa,给它赋值为变量a的地址(pa指向a)
    float* pb = &b ;  //定义一个指针变量pb,给它赋值为变量b的地址(pb指向b)

    printf("*pa = %d\n", *pa) ;  //通过"*"获取pa指向的变量a的值
    printf("*pb = %f\n", *pb) ;  //通过"*"获取pb指向的变量b的值

    return 0;
}

        原来还有这种操作!!!那我们可以通过指针变量修改其指向的变量的值吗?

        当然可以!你也学会举一反三了~看下面的一段代码,我们尝试通过指针来修改其所指向变量的值

#include <stdio.h>

int main()
{
    int a = 10 ;       //定义一个int类型的变量a,并赋值为10
    float b = 3.14 ;   //定义一个float类型的变量b,并赋值为3.14

    int* pa = &a ;     //定义一个指针变量pa,给它赋值为变量a的地址(pa指向a)
    float* pb = &b ;   //定义一个指针变量pb,给它赋值为变量b的地址(pb指向b)

    *pa = 20 ;     //通过"*"获取pa指向的变量a的值,把a的值修改为20
    *pb = 6.28 ;   //通过"*"获取pb指向的变量b的值,把b的值修改为6.28

    printf("a = %d\n", a) ;  //打印变量a的值
    printf("b = %f\n", b) ;  //打印变量b的值

    return 0;
}

        今天也学了不少的内容了,帮你回顾一下:

        (1)变量指的是任意时刻可以修改数值的一段内存。

        (2)我们通过不同的数据类型来定义不同的内存段的大小,给不同的数据以合适的数据类型,合理规划内存空间。

        (3)C语言常见的数据类型有:整数(整型短整型长整型),小数(单精度浮点型双精度浮点型),字母(字符型),布尔型无类型指针类型

        (4)指针类型是一种比较特殊的类型,它专门用来存放特定类型的变量的地址,使用"&"符号可以获取变量的地址,使用"*"符号可以获取指针所指向的变量的值。

        感谢前辈的贴心总结!我再去好好消化消化~~~

[end]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值