⑴ c语言字符串常量
常量有整型常量、浮点型常量、字符型常量及字符串常量。 ‘
字符串常量定义是指定义符号常量,用一个标识符来代表一个常量,通过宏定义预处理指令来实现。常量的定义:
#define count 60
这就定义了一个常量 count 它的值是一个常量60 在整个程序中不变。主调函数中的参数是实际参侍山腔数,被调函数中的参数是形式参数。
比如说:如下代码段
被调函数:
int max(int a,int b)
{if(a>b)
return a;
else return b;
}
主调函数:
main()
{
max(a,b);
}
在北调函数max(int a,int b)中a,b是形式参数在主函数中max(a,b)中的a,b是实际参数。
扩展老衫资料
1、在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。
2、在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式唯巧所使用的值就是这些字符所存储的地址,而不是这些字符本身。
3、可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。
⑵ C中的字符串常量保存在哪里是内存的堆区还是ROM中
不会是在 ROM里,这里无法写入的
应该就是在内存中
⑶ C语言基础问题:我们程序里定义的字符串常量都是编译后是在内存里分配还是存储在代码区
是的。只不过初始化char数组的放在栈咐腊上,初芹简樱始化char*的放在嫌丛rsrc区段(可以拿peid查看)。
⑷ C语言,字符串指针指向的字符串,那个字符串存储在哪个位置
你要位置,把内存地址弯败都给你打印出来了。然后你怎么又牵扯到常量了?动态申请的变量(即malloc函数申请的变量)存放在堆区!
idxbuf=malloc(6*sizeof(char));
动态随机分配内存空间,共6个char型数据大小的空间,因为是随机的,idxbuf指针指向的内存空间的起始地址在后面的语句中打印出来:
printf("before idxbuf address:%p,idxbuf:%s ",&idxbuf,
&idxbuf:取地址,%p与指针对应,是输出指针的地址。
address:0x7ffeffc9f0b0,就是字符串指针idxbuf指向的念晌字符串存储在内存中的地址位置。
你要字符串指针idxbuf的随机分配的地址,只需要
printf("before idxbuf address:%p ",&idxbuf);
这一语句就可以了,原来的程序编译有点问题,修改之后通过:
程序先编译后链接,转换成0与1的机器代码后调入内存运行。这个问题被你牵扯到程序运行的内存分配方式,而不是你所说的想找字符串在内存中的地埋高颤址。请用内存分配方式详解提问!
简单的说,一个程序调入内存后,在内存中分为以下5个部分。
1、栈区(stack)
2、堆区(heap)
3、全局区(静态区)
4、文字常量区
5、程序代码区
内存分配详细不说了,
因为我已经很明确的根据提问回答了字符串存储的位置:address:0x7ffeffc9f0b0。
⑸ c语言中,常量是存放在内存中吗
常量和变量是放在不同的"段"(section)里,程序衫纳一旦加载,常量/变量自然都在内存里。
在程序的运行过程中,把需要处理的数据存放在内存早汪储器中,称始终保持不变的数据为“常量”,称存放可变数据的存储器单元为“变量”,其中的陆塌仔数据称为变量的值。
整数是以补码的形式转换为二进制代码存储在计算机中。
实数是以IEEE754标准转回换为二进制代答码存储在计算机中。
字符本质实际也与整数的存储方式相同(先通过ASCII码把字符转换为对应的整数,再按整数以补码形式转换为二进制)。
(5)c程序中的字符串常量存放在哪里扩展阅读:
在除了‘C/C++’的一些高级程序语言中,‘常量’可以被称作,“在一个信息变化过程中,始终不发生改变的量”,其可以是不随着时间变化的某些量的固定信息;也可以表示为某一数值的字符(或字符串),常被用来标识、测量和比较两者的差异。
但在 ‘C/C++语言中’,‘常量’如果还用‘运行过程中不变的量’来描述,就显得不太准确了,甚至是在具体使用时,这就是一个错误的概念。在 ‘C/C++’中,定义‘指针常量’时,根据‘const ’的位置的不同,可以定义出几个不同的形式,虽然其看起来‘符合常量的概念’,但是在实际运行中,其值或地址值是会发生变化的。所以本质还不是‘常量概念’
⑹ 字符串常量一般放在内存的静态区吗
这个不好说,不能明确说它放在什么地方,给你举个例子吧,用指针来举个例子
定义一个字符串常量:char* p = "what are doing?"
那么在这句话中,p和 "what are doing?"这两个是不在一个存储区上的,不过我认为字符串常量应该是存储在正文段和数据段之间,也有人说是放在静态存储区上,也有人说是旁漏棚放在rodata 只读数据段上,你可以自己从gdb上看一下。这里我给你一点资料你理解一下,我们一块学习啊
这里是几个存放数据的内存段:
1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;
2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。
3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。
4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。
5)堆——动态存储。
这里还有一段有个高人写的一段小程搜衫序,很详细的
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在运则堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"
优化成一个地方。
}
⑺ c语言中字符型数据在内存中的存储形式是
字符型数据在内存中储存的是它的ASCII码值,它是一个字节,所有数据类型在内存中都是以0和1代码二进制储存的,这个原则不会变。
在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。
编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节。在UTF-32编码中,世界上任何字符的存储都需要4个手明字首薯铅节。
(7)c程序中的字符串常量存放在哪里扩展阅读:
由于标准 ASCII字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将 ASCII字符集扩充为 8 位代码的统一方法。
ISO 陆续制定了一批适用于不同地区的扩充 ASCII字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码(即十者好进制数 128~255 ),称为扩展 ASCII 码。