C语言,char a[]="abc"。

1.系统会给abc分配内存吗?
2.如果分配内存如何找到它?

1. 会,系统在初始化时就为字符串"abc“分配了内存

2. 这个”abc"的地址就是数组a的首地址追问

1.系统的初始化是什么时候呢?

追答

就是系统调用你的程序开始执行的时候

追问

1.是不是int a;啊那些都是在初始化的时候分配存储空间?
2.有没有在预编译或者链接的时候分配存储空间的变量?
3.只有变量分配存储空间吗?

不好意思多问了点^_^

追答

1. 一般全局变量是初始化就分配了,函数内部的局部变量是调用函数时在栈内分配空间的,也可以认为是在函数初始化的时候分配的空间

2. 预编译和链接的时候一般只是在可执行文件里声明某个变量需要多大空间,只有到真正运行的时候才会在内存里分配空间。
3. 除了变量分配空间,静态数组等也会分配空间,譬如你上面的"abc"就属于静态字符串。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-26
char a[]="abc"
等价于
char a[4]="abc"。
还有个自动加上的字符串结束符。
这是数组初始化自然会分配内存,因为在初始化时使用了""引号,所以会自动加上\0。
一个char是8个位,也就是一个字节,所以须要在栈上开辟四个字符的大小空间。

有一种情况例外
char *const p = "abc";
该 字符串被分配到字符常量区。返回一个指针交给p。并不会开新的栈上空间。
只所以要加const是因为他指向的是静态常量不能修改。当然你可以改这个p指向的地址追问

1.const 有什么意义呢?
2.p指向的地址??还是字符常量?
3.加const是否*p不能赋值?所以内存单元可能不允许赋值?
4.有哪些内存单元是可以赋值的?

第2个回答  2013-04-26
像这样的问题最好自己测试一下,下面是c、c++测试,, 如果自己不动手,学不到东西的
#include<stdio.h>
#include<iostream>
using namespace std;
char ss[]="abc";
int main()
{
printf("%d\n",&ss[0]);
cout<<ss<<endl;
cin>>ss;
}
结果 4313088 abc
相似回答