打印

字符串与数组的定义

[复制链接]
5478|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
心静自然凉| | 2011-3-8 13:42 | 只看该作者
No,no,no.
unsigned char time_buf[8]和unsigned char code time_buf[8]都是定义一个数组,所不同的是后一个定义了数组的存放位置code,而前一个要根据编译器的设置存放。
你可以再仔细去看看书,有关字符串和数组的概念,你可以这样理解,字符是一些ASCII码,字符串是多个ASCII码的组合,最后要加个结束符,数组里面存放字符串。

使用特权

评论回复
板凳
ayb_ice| | 2011-3-8 13:46 | 只看该作者
一个是放在RAM中,在个是放大FLASH中,没有其它区别

使用特权

评论回复
地板
刘前辈| | 2011-3-8 14:05 | 只看该作者
本帖最后由 刘前辈 于 2011-3-8 14:48 编辑

定义字符串必须要带有初始化部分:例如:
char string[ ]="abcdef";
因为一个字符串必然要以 NULL('\0' )结尾;上面定义编译器会自动产生字符串结尾符'\n' .因此它的实际长度是7,即string[7].

或者写成 char  string[20]="abcdef";  //数组长度不能小于字符串长度。

如果写成全局变量   char  string [ ]="abcdef";
将会在默认DATA静态分配区得到一份字符串常量拷贝。

而写成  char  *str_ptr="abcdef";
会在默认DATA动态分配区得到一份指针变量拷贝。


见源代码:


使用特权

评论回复
5
刘前辈| | 2011-3-8 14:35 | 只看该作者
本帖最后由 刘前辈 于 2011-3-8 14:37 编辑

字符串是常量,所以两者都由编译器在CODE常量区有初始化复制。


使用特权

评论回复
6
zjswuyunbo| | 2011-3-8 16:45 | 只看该作者
呵呵
很晕啊

感觉字符串和数组貌似没什么关系。
字符串以0为结束符。。。
而数组则没这个要求。。

字符串可以存在数组里。。。

其实,他们的关系我一点也分不清。。。

不过,貌似不影响写代码。。

使用特权

评论回复
7
abin0415|  楼主 | 2011-3-8 19:49 | 只看该作者
谢谢啦。

使用特权

评论回复
8
刘前辈| | 2011-3-9 08:59 | 只看该作者
回6楼:
绝对影响写代码!例如:
如果要写2 个printf( ); 分别输出 string[ ]和*str_ptr,马上看出两者的不同:

*str_ptr的字符串分配在CODE区,而string[ ]字符串分配在DATA区,它的长度影响到SP堆栈的分配位置。如果string[ ]字符串是一篇**,长度大于256字节的话,连编译器都不干了。但是*str_ptr 却可以,只要你CODE区容量放的下。printf 输出几篇**小意思。

使用特权

评论回复
9
ji_dan| | 2011-3-9 18:53 | 只看该作者
小中见大,学习 了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

2105

帖子

5

粉丝