免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3149 | 回复: 5

[C] 字符串指针奇怪的用法 [复制链接]

论坛徽章:
0
发表于 2011-03-25 09:06 |显示全部楼层
本帖最后由 DNFCF 于 2011-03-25 09:37 编辑

简单的写了一代码
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.   char str[10]="sdfd";
  5.   printf("&str=%p\n",&str);
  6.   printf("&str[0]=%p\n",&str[0]);
  7.   printf("  str=%p\n",str);
  8.   return 0;[code]void bzero(void *dst,size_t n)
复制代码
}[/code]结果告诉我们,输出结果是一样的,我的疑问是:用bzero作为用例,其原型是:
如:
  1. bzero(&str,sizeof(str));
复制代码
这样写却会报错说参数类型不兼容:
  1. bzero(str,sizeof(str));
复制代码
但是:
  1. bzero(&str[0],sizeof(str));
复制代码
却是对的。
他们的值不是相同的吗?为什么会报错呢??求指点
每次当用到字符串指针时候,总是纠结着是写&str,还是str。。。。求高人为我解惑。
  1. #include<stdio.h>
  2. void print(void*p)      ///对比=============>>bzero(void *dst,size_t n)
  3. {
  4.   printf("In print:%s\n",(char *)p);
  5. }
  6. int main(void)
  7. {
  8.   char p[10]="aaaa";
  9.   print((void *)p);//OK!=============>>bzero(p,10);//NOT OK!
  10.   print((void *)&p);//Not OK!=========>>bzero(&p,10);//OK!
  11.   print((void *)&p[0]);//OK!==========>>bzero(&p[0],10);//OK!
  12. }
复制代码

论坛徽章:
0
发表于 2011-03-25 09:12 |显示全部楼层
这个是基本的用法吧,,,有什么奇怪的?
看教材吧

论坛徽章:
0
发表于 2011-03-25 09:17 |显示全部楼层
本帖最后由 liwangli1983 于 2011-03-25 09:31 编辑

str的类型是char *
&str的类型是char[10] *...这么写起来很奇怪,还是借用下typedef.
typedef char char_ten[10];
char_ten *p; 其中&str的类型和p是一致的,这样就理解了吧

进一步来说,如果str的地址是0,那么str+1的地址是1,&str+1的地址是10

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
发表于 2011-03-25 09:22 |显示全部楼层
我没看懂是哪个bzero提示不兼容?

bzero(str, sizeof(str));
是肯定可以的。

如果有警告的话就强转一下
bzero( (void *)str, sizeof(str));


有警告,看函数原型
man bzero

论坛徽章:
0
发表于 2011-03-25 09:38 |显示全部楼层
str的类型是char *
&str的类型是char[10] *...这么写起来很奇怪,还是借用下typedef.
typedef char ch ...
liwangli1983 发表于 2011-03-25 09:17



    谢谢!!

论坛徽章:
0
发表于 2011-03-25 16:08 |显示全部楼层
这个应该跟数组指针相类似  数组名 和 指针之间还存在着一些区别 可能影响到寻址操作吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP