“变量名”到底是什么?

我们定义一个变量之后,变量名到底起到什么作用?

一个变量有三种属性:数据类型,数据值,内存地址。下面写一段代码:

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


int main()
{
    char apple = 1;
    int pear = 2;
    char banana[5] = {};
    int orange[5] = {0};


    printf("&apple=%p,&apple+1=%p\n",&apple,&apple+1);
    printf("&pear=%p,&pear+1=%p\n",&pear,&pear+1);
    printf("&banana=%p,&banana+1=%p\n",&banana,&banana+1);
    printf("&orange=%p,&orange+1=%p\n",&orange,&orange+1);


    return 0;
}

运行结果如图:


apple是一个字符型变量,它的地址是&apple,它的值为1,占据的内在空间是一个字节。

pear是一个整形变量,它的地址是&pear,它的值为2,占据了四个字节。但是四个字节应该有四个地址,取的是哪一个呢,答案是首字节的地址。

所以我得出第一个结论:变量的地址是指它所占据所有空间的首字节的地址


其中,可以观察到,(&banana+1)- &banana = 0x0022ff08-0x0022ff03 = 0x00000005 = 5*sizeof(char),

(&orange+1) - &orange = 0x0022ff00 - 0x0022feec = 0x00000014 = 5*sizeof(int)  ,长期以来我对此很困惑,只知道这个结果,却不知道为什么。后来我总结了一句话来解决这个问题:在程序中,变量名代表了它所占据所有的内存的总和

banana是一个数组,它的地址是&banana,占据的内存空间为5个字节,banana代表的就是这5个字节。

orange是一个整形数组,它的地址为&orange,占据内存空间为20个字节,orange代表的就是这20字节。


另一个问题是,数组名当指针的用法比较让人混淆。其实我是这么理解的:因为它占据的内存的数量不是每次都相同的,所以不能直接读取它存储空间内的值。而是用数组名代表这块内在的起始地址,以便于对这段内在进行读写,这也就是为什么banana的值和&banana的值相同的原因。具有现在相同的用法是函数名,函数名也是只起到一个标号的作用,它的值就是个指针,指示函数的入口地址。

好了,今天就到这里。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值