c语言变量的地址是哪个字节地址,变量的地址与变量的值 | C语言

变量的定义与赋值

编程语言中有一个比较容易混淆的概念就是“变量的地址”与“变量的值”。因为在编程语言中我们用同一个标号来表示这两个东西,由编译器根据上下文判断它的具体含义。

让我们看下最简单的变量的定义与赋值:

int a; // 1

a = 9; // 2

第1行,表示定义了一个变量a。对于编译器来说,编译器为a分配一个地址,这个地址代表一个存储空间,空间中存储的数据的类型是int。

第2行,表示赋值,把9赋值给变量a。即程序运行时,通过变量a的地址找到存储空间,然后向存储空间中写入9。

这个存储空间可以用下图表示,这里假设编译器分配给a的地址为C9420:

2cf7c646bc60

image

再来看一组表达式:

int a; // 1

a = 9; // 2

int* b; // 3

b = &a; // 4

第1行,见上例。

第2行,见上例。

第3行,表示定义了一个变量b。对于编译器来说,编译器为b分配一个地址,这个地址代表一个存储空间,空间中存储的数据的类型是int *。

第4行,表示赋值,把a的地址赋值给b。即程序运行时,通过b的地址找到存储空间,然后向存储空间中写入一个数据,这个数据是a的地址。

这个存储空间可以用下图表示,这里假设a的地址为C9420,b的地址为CC004:

2cf7c646bc60

image

通过上面两个例子可以看出来这几个因素与变量有关:

变量的地址

变量的值

变量的类型

变量的地址用于寻找存储空间,存储空间存放变量的值,该值的类型由变量的类型来定义。

sizeof

sizeof不是函数,是c语言中的一元运算符。它用来计算一个对象或者一个数据类型所占用的空间大小,单位为char所占用的字节。

以下例子,我们假设char类型占用1字节,int占用4字节,指针占用4字节。

int a = 0;

char b = 't';

char* c = &b;

int arr[9] = {0};

int* p_arr = arr;

printf("%d, %d, %d, %d\n", sizeof(char), sizeof(int), sizeof(char*), sizeof(int*)); // 结果为 1, 4, 4, 4

printf("%d, %d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(arr), sizeof(p_arr));// 结果为 4, 1, 4, 36, 4

int占用4个字节的存储空间,a的类型为int,所以sizeof(a)等于4。

char占用1个字节的存储空间,b的类型为char,所以sizeof(b)等于1。

指针占用4个字节的存储空间,c的类型为指针,所以sizeof(c)等于4。

arr是一个数组,sizeof(arr)计算的是整个数组占用的空间,所以等于36。

指针占用4个字节的存储空间,p_arr的类型为指针,所以sizeof(p_arr)等于4。

再来看结构体的例子:

struct test {

int a;

char b;

};

sizeof(struct test)的结果可能是8而不是5,这里涉及到字节对齐。

更多

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值