读书人

为什么有些变量实在编译时就能确定而

发布时间: 2013-01-28 11:49:56 作者: rapoo

为何有些变量实在编译时就能确定,而有些却只能在运行时确定
void main()
{
char a = 1;
char c[] = "1234567890";//为何这个1234567890是在运行时刻才赋值
char *p ="1234567890";//而这个1234567890却是在编译时就能确定的?
a = c[1];
a = p[1];
return;
}
请各位大侠讲解一下!谢谢 C/C++
[解决办法]
楼主为什么这么想....
char c[] = "1234567890";编译的时候就已经知道它的长度和内容,而且还在它最后加'\0'
[解决办法]
你是怎么确定这个变量在什么时候确定的? 什么方法?求
[解决办法]
char c[] = "1234567890";实际上就是char c[] = {'1',...,'0'};它的本质是个数组。
char *p ="1234567890";的本质是个常量字符串,有个指针p指向了这个字符串。

[解决办法]
这是数组和指针的区别之一。

【在栈中】定义指针char *p ="1234567890";字符串常量在编译时确定,放在全局变量里,它的地址在运行时赋给栈变量p

【在栈中】定义数组char c[] = "1234567890";字符串是在运行时赋给栈变量c的

注意上面强调了【在栈中】,如果是全局变量,那他们都是在编译时就被确定了。

[解决办法]
因为数组初始化时是直接赋进栈中的,而栈只有在进入函数后才能得到分配,而指针那个是放在常量区,只是把常量区的这个字符串的地址赋给了指针而已。
[解决办法]
适当学习点汇编。

[解决办法]
适当学习点编译原理。
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

[解决办法]
因为有些需要运行时候才需要内存。

读书人网 >C语言

热点推荐