关于数组常量和指针
时间:2011-12-24
来源:互联网
char *s2 = "bbbbbbbbbbbbbbbbb";
s1是在运行时赋值,而s2是在编译时就确定的,想问问为什么....?谢了先...
作者: bluesnail1986 发布时间: 2011-12-24
s2是一个char*类型的指针,"bbbbbbb"是在常量区分配好空间的字符串,这种写法的意思是,用该字符串的首元素指针初始化s2.
作者: mingliang1212 发布时间: 2011-12-24
s1是一个字符串数组,"aaaaaaaa"是这个数组的初始值.所以运行到这里时,要把数组初始化,也就是运行时赋值.
s2是一个char*类型的指针,"bbbbbbb"是在常量区分配好空间的字符串,这种写法的意思是,用该字符串的首元素指针初始化s2.
那在编译阶段,编译器对s1做了什么呢?
作者: bluesnail1986 发布时间: 2011-12-24
引用 1 楼 mingliang1212 的回复:
s1是一个字符串数组,"aaaaaaaa"是这个数组的初始值.所以运行到这里时,要把数组初始化,也就是运行时赋值.
s2是一个char*类型的指针,"bbbbbbb"是在常量区分配好空间的字符串,这种写法的意思是,用该字符串的首元素指针初始化s2.
那在编译阶段,编译器对s1做了什么呢?
在编译阶段只会生成代码.任何对象都是在运行时才产生的.也就是说编译器什么都不能对s1,s2做.他只能写出代码,告诉计算机执行到这里时对s1,s2做什么.
"aaaaaa","bbbbb"是在常量区的字符串,在开始进入main函数之前已经在内存中了.
然后运行到该语句时就会按我1楼说的那样初始化.
作者: mingliang1212 发布时间: 2011-12-24
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
s1是在运行时赋值,而s2是在编译时就确定的,想问问为什么....?谢了先...
这种说法不合适的,编译过程都只是在常量存储区存放字符,对s1和s2什么都没做,只是运行时候s1需要把常量存储区中的字符复制到s1说指向的内存也就是栈中,这就是我们常说的赋值,而s2只是被赋值了一个地址
作者: IT_LEAF 发布时间: 2011-12-24
所以 s1 仅仅是一个有意义的符号,她表示 "aaaaa" 这个数据,可以进行很多操作,但是不能给她赋值。
因为符号是没有自己的存放空间的。
对于 s2 , 在编译的时候,系统为她指定了一个位置,所以她又自己的存放空间,这就是变量。
这里需要区别的是 int a; 和 const int a; 的差别。
同时,在编译的时候,编译器为这个变量指定了一个初始值,这个初始值为 "bbbbb" 的缺省符号。
作者: Saleayas 发布时间: 2011-12-24
引用 2 楼 bluesnail1986 的回复:
引用 1 楼 mingliang1212 的回复:
s1是一个字符串数组,"aaaaaaaa"是这个数组的初始值.所以运行到这里时,要把数组初始化,也就是运行时赋值.
s2是一个char*类型的指针,"bbbbbbb"是在常量区分配好空间的字符串,这种写法的意思是,用该字符串的首元素指针初始化s2.
那在编译阶段,编译器对s……
常量内存区里面的初始化应该是在编译时候做的做的吧,所以说编译的时候只生成代码不合适吧
作者: IT_LEAF 发布时间: 2011-12-24
常量内存区里面的初始化应该是在编译时候做的做的吧,所以说编译的时候只生成代码不合适吧
编译期间只生成代码.绝对不会对内存区初始化.因为程序执行之前是没有拥有任何内存的.甚至代码都不在内码中.只有当操作系统加载了代码,才有可能执行任何操作,包括全局对象的初始化.之类的.
作者: mingliang1212 发布时间: 2011-12-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28