網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論
論壇幫助 社區 日曆事件 今日新文章 搜尋

回覆
 
主題工具
  #1  
舊 2014-06-25, 03:23 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設 指標使用的時機?

這是書上的範例,用一個字串二維陣列,然後輸入前面的顏色單字,出現後面的顏色意義。程式碼如下:
#include <stdio.h>
#include <string.h>

char *p[][2]={
"red","hot",
"green","peace",
"blue","suck",
"yellow","bright",
"white","pure",
"",""};

int main(void){
int x;
char color[90];
printf("enter a color:\n");
gets(color);
for(x=0;*p[x][0];x++)
{if (!strcmp(p[x][0],color))
printf("%s is %s.",color,p[x][1]);
}
return 0;
}

搞不懂的就是為何前面藍字部份是可以用指標*p[][],而紅字部份則沒有指標*的符號?
我有試著把它們加上指標符號,結果是錯的。那請問一下,後面為何不用指標符號?

thanks
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #2  
舊 2014-06-25, 04:04 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

函数原型:
int strcmp(const char *s1,const char *s2)

strcmp(*p[x][0],color)是不允许的转换
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #3  
舊 2014-06-25, 04:14 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設

引用:
作者: yumi 查看文章
函数原型:
int strcmp(const char *s1,const char *s2)

strcmp(*p[x][0],color)是不允许的转换

不太了解?



我目前學到的strcmp是strcmp(str_1,str_2);裡面並不是用指標,所以本題的{if (!strcmp(p[x][0],color))其中的p而非*p是因為無法用*而拿掉嗎?
再來就是最後的printf("%s is %s.",color,p[x][1]); 為何不寫成printf("%s is %s.",color,*p[x][1]);呢?
而且我發現在(!strcmp(p[x][0],color)中如果寫成(!strcmp(p[x][0],&color)也是可以的,why?

還有,為何這個char *p[][2]要在int main(void)的外面定義呢?我有試著把它移到main函數裡面來,答案似乎都一樣正確。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #4  
舊 2014-06-25, 05:13 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

(!strcmp(p[x][0],&color)
color是字符阵列,本身指向字符串起始位置。是否加&都一样的。
就本程式而言,char *p[][2]在int main(void)外边定义和在mian()里面定义是没有区别的,因为只有一个main()函数,只要在使用前定义char* p[][2]即可。
但是,如果程式里有其他函数的话,在main()里定义char *p[][2],其他函数就无法使用char *p[][2]的。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #5  
舊 2014-06-25, 05:17 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 23,057
預設

引用:
作者: yumi 查看文章
(!strcmp(p[x][0],&color)
color是字符阵列,本身指向字符串起始位置。是否加&都一样的。
就本程式而言,char *p[][2]在int main(void)外边定义和在mian()里面定义是没有区别的,因为只有一个main()函数,只要在使用前定义char* p[][2]即可。
但是,如果程式里有其他函数的话,在main()里定义char *p[][2],其他函数就无法使用char *p[][2]的。
感謝,這二點我都瞭解了
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆


發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 08:47 PM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.