楼上也是熟面孔的大侠了。
问题一:你说的编译系统随意处理,就是这‘随意’二字让我的程序在ADS和IAR不能通用,尤其是我例举的ADS的情况,编程不规范,不使用const修饰的话,后果很严重---现象是你都不知道什么时候会死机。
问题二:之所以用 char *p 来定义,指针的好处嘛我也不多说了,用数组那么长度将看情况变化。当在一个结构体数组中包含一个字符串成员时,你就明白我说的数组完全不好用。
typedef struct students_informertion
{
char *name; //姓名
uint8 age; //年龄
uint8 number; //编号
........ //其他信息
}SI;
声明一个包含字符串指针的结构体数组 统计学生信息用
然后在定义的时候初始化
SI si_array[] =
{
"张三", 20, 1,
"李四", 21, 2,
"王五", 18, 3,
"赵一二", 22, 4,
"欧阳三四", 22, 5,
"刘七", 24, 6,
}:
对 si_array[]的任意元素的成员 *name 赋值 只需要直接写 字符串就好了 很方便。但是要换成用 数组来装那长度就不确定了,将数组声明为最大元素个数,当统计的人数很多时,无疑是浪费很多空间。
所以用指针来装最合理,但是问题同样有:
ADS环境下 默认 char *name = "张三";
字符串"张三"存储在flash中 不可修改(最好用const修饰)
这样的好处是 字符串本身不占用RAM 节约内存,可以想象下统计几百人信息时那姓名字符串的量放内存里要疯了。
坏处是字符串不可修改, 如果是做一个动态的表格,人员信息随时要更改,那就实现不了了。
同样在IAR环境下 char *name = "张三";
字符串"张三"存储在RAM中 ,这样的好处和坏处很上述正好相反。
我所想表述的实际问题就是以上说的 这种情况下不知道各位可有高招?
我想要的效果是 不用数组用指针装字符串,定义的同时初始化,字符串存放由我决定。
|