一、常量和变量的存储位置 1.1 实验方法 1.2 示例程序 示例程序1 1.3 结果分析 1.3.1 运行时结果 1.3.2 静态分析结果 〇、环境 一、常量和变量的存储位置 1.1 实验方法 静态观察:对编译得到的可执行文件进行分析 动态观察:运行时获取变量的地址,并分析变量在进程地址空间的位置 1.2 示例程序 示例程序1 #include...
首先声明一个字符指针b,然后定义一个字符串常量"321\0",字符串常量存储在常量区,b存储在栈区,b的值是字符串常量"321\0"的地址。 这里用到了const,在C语言里不加const也行,C++里不加会有个警告,但不影响编译。但是建议加上const,能够让程序员一眼就知道此指针指向的是常量,也就是最终内容无法修改。 ps: ...
也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存在这个区域 bss段:已经定义但没赋初值的全局变量和静态变量存放在这个区域。 两者之间区别是:代码段,数据段,堆栈段是cpu级别的概念,五大分区属于语言级别的概念,两者是不同的概念。 三、可执行程序内存空间与逻辑地址空间的...
呵呵,但是它们有不同的地址,因为它们的变量名不同,地址是根据变量名分配地址的,那么常量呢,它也是有地址的,只是和变量存贮的地方不同,但是存储的形式是一样的,就是在内存的地方不同,内存中有专门放常量的,
1、如果是以const关键字修饰变量而产生的“不可变变量”的话,是有地址的,如const int a = 0。但是严格来说const修饰只是产生了不可变变量,并不是严格意义上的常量。2、字符串常量,例如 char *a = "abc";那么字符串“abc”就是一个字面值字符串,这是一个常量,其地址就是这个字符串第一个...
如果不存在 , 直接在常量区 创建一个新的字符串 , 然后将地址 赋值给 char* 指针 ; 下面的 2 2 2 个程序 , 分别演示 不同的字符串常量 和 相同的字符串常量 地址的区别 ; 一、正常程序 分别从两个函数中 , 获取两个不同的字符串 , 打印出这两个 字符串 内容 及 指针指向的地址 ; ...
所谓的常量区就是一块专门腾出来放常量的内存区罢了。计算机每个内存块都有编号,这个编号就是内存块的地址,这个地址CPU可以找得到。在需要用某个常量的地址的时候,CPU就会找到这个常量的所在的内存,记下它的编号,将这个编号数据存入另一块小内存中。打个比方:内存好像一条大街,大街上有好多房子,...
书上说:"hello world"这个字符串被当作常量而且被放置在此程序的内存静态区。 c为一个字符型指针,若为局部变量,则存储在栈内,该指针变量里面存了个地址, 该地址为字符串中第一个字母h的地址。 当使用printf()输出时,格式化时选择%s,会输出hello world,这是printf()遇到结尾符号'\0'即停止显示打印。
-> RO段保存常量所以也被称为.constdata -> RW段则是普通非常全局变量,静态变量就在其中 .bss: 存放程序中为初始化的和零值全局变量。静态分配,在程序开始时通常会被清零。 从低地址到高地址 二、在ubuntu系统中输出信息进行验证 输入代码main.c #include <stdio.h>#include <string.h>#include <stdlib.h>...
变量可以取地址,因为编译器会在内存中分配一个空间来存储对应的数值。常量,尤其是数值型数据,它会被直接放到汇编指令里面,比如一个赋值语句 c=508;编译的结果,很可能就是MOV R1, #508这样的一个汇编语句。那就谈不上地址了。字符串型常量,比如“HELLO”,它就会是放在某个内存空间中,待程序去...