亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 字符串指針奇怪的用法 [打印本頁]

作者: DNFCF    時間: 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)
復(fù)制代碼
}[/code]結(jié)果告訴我們,輸出結(jié)果是一樣的,我的疑問是:用bzero作為用例,其原型是:
如:
  1. bzero(&str,sizeof(str));
復(fù)制代碼
這樣寫卻會報錯說參數(shù)類型不兼容:
  1. bzero(str,sizeof(str));
復(fù)制代碼
但是:
  1. bzero(&str[0],sizeof(str));
復(fù)制代碼
卻是對的。
他們的值不是相同的嗎?為什么會報錯呢??求指點
每次當(dāng)用到字符串指針時候,總是糾結(jié)著是寫&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. }
復(fù)制代碼

作者: 雨夜流星    時間: 2011-03-25 09:12
這個是基本的用法吧,,,有什么奇怪的?
看教材吧

作者: liwangli1983    時間: 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
作者: pandaiam    時間: 2011-03-25 09:22
我沒看懂是哪個bzero提示不兼容?

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

如果有警告的話就強轉(zhuǎn)一下
bzero( (void *)str, sizeof(str));


有警告,看函數(shù)原型
man bzero
作者: DNFCF    時間: 2011-03-25 09:38
str的類型是char *
&str的類型是char[10] *...這么寫起來很奇怪,還是借用下typedef.
typedef char ch ...
liwangli1983 發(fā)表于 2011-03-25 09:17



    謝謝!
作者: wb112200    時間: 2011-03-25 16:08
這個應(yīng)該跟數(shù)組指針相類似  數(shù)組名 和 指針之間還存在著一些區(qū)別 可能影響到尋址操作吧




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2