美文网首页
必须知道的C语言知识细节:什么是变量的地址

必须知道的C语言知识细节:什么是变量的地址

作者: 哪有岁月静好 | 来源:发表于2020-07-24 21:31 被阅读0次

计算机中内存是按照字节编址的,也就是每个字节都有唯一的地址,例如32位计算机,内存地址空间是2的32次方,也就是4G字节空间,地址编号从0开始,范围是0到2^32-1。

C语言是接近硬件的高级语言,提供运算符(&和*)以及指针直接操作内存地址。

地址本质上也是一个无符号整数,C语言使用运算符 & 直接获取变量地址,运算符*用来定义指针变量和间接获取地址存放的值。

输出有两种方式:

1.使用格式控制符号 %p 输出地址十六进制格式。

2.使用%lu输出地址无符号十进制整数表示。

例如:

int a;

printf("%p", &a);

printf("%lu", &a);

编译环境:Windows 10 x64 + Dev-C++ GCC 64-bit

输出:

000000000062FE18

6487576

很明显因为是64位GCC编译,地址空间是64位大小,转换16进制后表示输出。

编译环境:windows 10 x64 + Dev-C++ GCC 32-bit

输出:

0061FE98

6422168

选择32位GCC编译,地址空间是64位大小,转换16进制后表示输出。

备注:不同编译环境、每次运行,地址值都不一样。

C语言中指针的值是内存地址,因此变量的地址可以直接赋值给指针变量。

例如:

// 分配内存地址,存放整数1

int a = 1;

// 内存地址赋值给指针p

int *p = &a;

// 直接输出变量a的地址

printf("%p\n", &a);

// 间接输出变量a的地址

printf("%p\n", p);

// 输出变量a地址里面存放的整数值

printf("%d\n", *p);

输出结果:

编译环境:windows 10 x64 + Dev-C++ GCC 64-bit

输出:

000000000062FE14

000000000062FE14

1

很明显,指针p的值和变量a的地址值是相等的,指针p保存了变量a的地址,*p间接通过内存寻址,可以找到内存地址对应存放的整数1。

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。



相关文章

  • 必须知道的C语言知识细节:什么是变量的地址

    计算机中内存是按照字节编址的,也就是每个字节都有唯一的地址,例如32位计算机,内存地址空间是2的32次方,也就是4...

  • 必须知道的C语言知识细节:=和==区别

    今天有同学问我,C语言中的等号和数学中的等号区别。这个问题对初学者的确有一些迷惑,这里详细说明下。 C语言中等号=...

  • 必须知道的C语言知识细节:|和||、&和&&区别

    ||和|,&和&&是初学者容易混淆的运算符。 从运算符种类来看,两者是完全不同的运算符。 ||是逻辑运算符,表示逻...

  • 必须知道的C语言知识细节:声明和定义

    C语言中的声明(declaration)和定义(definition)是两个容易混淆的概念。 声明只是给变量、函数...

  • 必须知道的C语言知识细节:进制表示

    C语言中表示数时经常提到二进制、八进制、十进制和十六进制表示。 为方便理解,先介绍十进制。 十进制:是指由0,1,...

  • [C]C语言指针

    Blog C语言指针详解 C语言字符串操作 指针的作用 指针是程序数据在内存中的地址,指针变量是用来保存这些地址的...

  • C语言-指针

    指针的概念 指针就是地址,地址就是指针 指针变量是存入内存单元地址的变量 在C语言中,指针变量的长度是固定的,在3...

  • C语言基础

    C语言定义变量 定义一个变量 给变量赋值 定义一个变量的同时给变量赋值 C语言使用变量之前必须赋值或者初始化 试试...

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

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

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

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

网友评论

      本文标题:必须知道的C语言知识细节:什么是变量的地址

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