美文网首页C语言进阶
变量的地址与变量的值 | C语言

变量的地址与变量的值 | C语言

作者: 好好编程 | 来源:发表于2018-01-16 15:12 被阅读95次

变量的定义与赋值

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

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

int a;      // 1
a = 9;      // 2
  • 第1行,表示定义了一个变量a。对于编译器来说,编译器为a分配一个地址,这个地址代表一个存储空间,空间中存储的数据的类型是int
  • 第2行,表示赋值,把9赋值给变量a。即程序运行时,通过变量a的地址找到存储空间,然后向存储空间中写入9。

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

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

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,这里涉及到字节对齐。

更多

相关文章

  • C语言之指针,便于理解

    一、指针变量定义 C语言有两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1、定义的格...

  • C语言:指针1

    一、指针变量定义 C语言两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1.定义格式:...

  • 变量的地址与变量的值 | C语言

    变量的定义与赋值 编程语言中有一个比较容易混淆的概念就是“变量的地址”与“变量的值”。因为在编程语言中我们用同一个...

  • C语言_指针

    @(C语言) [toc] 指针:指针变量存储的是变量类型对应的变量的值 &(取地址符) &:是一个操作符,运用在内...

  • c语言-----指针

    c语言-----指针 1.声明/定义变量的时候 表示一个指针变量 2.除了定义指针变量之外 都是访问某个地址的值 ...

  • C# 使用unsafe非托管代码测试

    C#使用托管平台,不允许操作变量地址,实际可以在获取变量的地址的,修改地址变量指向的值,也即修改了变量的值。 如下...

  • 复习指针

    一、指针基础 以int c = 0;为例变量三要素:变量名c,值0,和其在内存中的地址。 指针即地址值 指针变量为...

  • 数组-C\Java

    ·C语言:·C语言中的语法:声明、赋值·声明:标示代码格式·赋值:变量获得值的方式变量种类:标量(scalar)、...

  • 六、Go指针

    六、Go语言指针 1.使用&访问变量在内存中地址 2.指针 一个指针变量指向一个值的内存地址。 与变量和常量相同,...

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

网友评论

    本文标题:变量的地址与变量的值 | C语言

    本文链接:https://www.haomeiwen.com/subject/kavsoxtx.html