免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5732 | 回复: 5
打印 上一主题 下一主题

字符串指针如何分配空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-19 15:24 |只看该作者 |倒序浏览
在c语言中,我知道,可以用字符数组来保存字符串如:
  1. char p[]="ABCD";
复制代码
用sizeof(p)测试结果为5,因为最后有个数组结束符\0所以是5这我可以理解,这样代码打印p字符数组时就知道哪里结束。

现在遇到的情况是字符指针:
  1. char *c ="hello world";
  2. print (%s,c);
复制代码
上面可以打印出c这个字符指针指向的字串“hello world”,我用sizeof(c)测试结果为4,这是一个字符指针的大小。
我疑惑的是在打印c字符指针时如何知道这个“hello world”中d字符是最后一个字符?因为字符数组有‘\0’。字符指针
靠什么定义结束呢?

论坛徽章:
0
2 [报告]
发表于 2012-02-19 15:41 |只看该作者
还是 '\0'

论坛徽章:
0
3 [报告]
发表于 2012-02-19 18:26 |只看该作者
指针只是存放地址的。第一步先将你的字符串的首地址赋值给这个指针,然后下面的事,就是从你的字符串的首地址开始向下读取,一直遇到“\0”结束。

论坛徽章:
0
4 [报告]
发表于 2012-02-19 23:44 |只看该作者
第一个 sizeof(p)等价于sizeof(char[5]),值为5。
第二个sizeof(c)等价于sizeof(char *),值为指针尺寸,用32位的系统及编译器时值为4,用64位系统及编译器时值为8,用16位系统及编译器时值为2。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2012-02-20 08:50 |只看该作者
一个string literal就是一个字符数组。前一种情况声明一个数组,打印传参时将数组名转换为指针。后一种情况声明一个指针变量,并且声明了一个匿名数组,然后将指针指向这个数组。

char* abc = "abc";
char def[] = "abc";

sizeof(abc)和sizeof (def)不一样的原因是abc的类型是char*, def的类型是char[4].

论坛徽章:
0
6 [报告]
发表于 2012-02-20 10:56 |只看该作者
双引号, 自动给你带上了一个\0. 和你具体把这个地址传给谁了无关.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP