C++数组请教,比如char[100],此数组中的存放数据内容和个数不定,如何知道存放了多少数据(数据中会有0)
答案:2 mip版
解决时间 2021-02-20 22:12
- 提问者网友:你說、你愛我
- 2021-02-20 12:37
不是char,而是unsigned char
最佳答案
- 二级知识专家网友:你瞎啊撞我心上來
- 2021-02-20 13:19
如果你数据中有0,那就没法判断了。
你最好再用个变量保存数据长度。
你最好再用个变量保存数据长度。
全部回答
- 1楼网友:寄出个心动
- 2021-02-20 14:34
1、const char *out[10];这个不需要初始化么 ?
答:这个问题问的好, const的目的是说这个数组是常量字符指针数组,常量是要初始化的。确切的说out是个符号常量,符号常量是什么意思呢?就是用符号来代替常量。比如一个班有30个人,你用int age[30]; 的数组来分别存储30个人的年龄。 然后我们输入这30个人的年龄你就会写这样的代码
for (int inx=0; inx!=30; ++inx) scanf("%d", &a[inx]);接着让你输出这30个人的年龄:
for (int inx=0; inx!=30; ++inx) printf("%d\t", a[inx]);
那现在问题来了,如果让你存储60个人、100个人呢?你得把上面两个for循环代码中的inx!=30分别改为 inx!=60 或者inx!=100 并且你定义的常量必须修改为int age[60]或者int age[100]。 这个过程你修改了3处代码.
如果我们现在 这样写代码:
const int student_num = 30;
int age[student_num];
for (int inx=0; inx!= student_num; ++inx) scanf("%d", &a[inx]);
for (int inx=0; inx!= student_num; ++inx) printf("%d\t", a[inx]); 当人数变成60人或者100人时,你只需要修改const int student_num = 30;只修改这一句就好了。是不是省掉了很多事。
这和数学中的代数是一样的,代数代数就是代替数!这是c/c++引入符号常量的原因,正是因为这个原因,所以我们一般都会将const的符号常量进行初始化。
2、我感觉指针数组的每个指针没有分配空间,谁能帮帮忙,
答:const char *out[10] 到底有没有分配空间 这个要看你放的位置。比如下面的代码
#include
//这里out被分配到静态存储区 默认会被初始化为0 这是c++标准规定 的初始化
const char* out[10];
int main()
{
//这里被分配在栈区,这时候初始化要看编译器啦,以vc为例,debug版会初始化0xcc而relea//se版不好说的 ,因为0xcc代表的是一个断点即程序执行到它会停下来抛出一个异常
//所以你生成debug版时,这个程序实际上是个废物。
const char *out[10] = {0};
printf("%s%s", out[0], ::out[0]);
return 0;
}另外值得一提,上面说的分配空间是说的字符指针的空间而不是字符串的分配空间比如下面的代码
int main(){
//指针p的空间是分配在栈区的,但是hello world却要存储在静态数据区中。要区分指针和数据的
//存储分配
const char *p = "hello world!";
printf("%s", p);
return 0;
}
3后面的程序中要向这指针数组中存入数据,我感觉这是const类型,应该不能赋值吧,
答:你的理解是对的,的确不能赋值, 在1中相信你能理解为什么引入 const了,现在从硬件角度来理解一下,我们知道内存是一个r-s触发器,也就是说有一个写入端 一个输出(端)也就是读取数据的一端 还有一个控制端 const就是代表的 内存输出端,换句话说它代表内存的只读操作。 所以 它是不能被赋值的。
我是菜鸟,希望能帮到你,观楼主英俊潇洒,风流倜傥,必当世豪杰,诚邀加入0x30百度贴吧,共商义举,建不世之功!
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯