iT邦幫忙

0

c語言-指標與陣列的關係

匿名 2012-03-21 13:52:133956 瀏覽

越看C語言越後面,對題目上的東西就想越多~

看不是很懂這一段:printf("array[%d]=%d<-->*(array+%d\)=%d\n",count,array[count],count,*(array+count));

問題如下:
我看了一下列印那一段的程式,跟執行出來的答案,那後面這一串呢?count,array[count],count,*(array+count))是在做啥的?

array[0]=1<-->*(array+0)=1
array[1]=2<-->*(array+1)=2
array[2]=3<-->*(array+2)=3
array[3]=4<-->*(array+3)=4
array[4]=5<-->*(array+4)=5

******************************
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int array[5]={1,2,3,4,5};
int count;

for(count=0;count<5;++count)
printf("array[%d]=%d<-->*(array+%d\)=%d\n",count,array[count],count,*(array+count));

system("PAUSE");
return 0;
}

答案:
array[0]=1<-->*(array+0)=1
array[1]=2<-->*(array+1)=2
array[2]=3<-->*(array+2)=3
array[3]=4<-->*(array+3)=4
array[4]=5<-->*(array+4)=5

kradark iT邦好手 1 級 ‧ 2012-03-22 19:58:22 檢舉
8
總裁
iT邦好手 1 級 ‧ 2012-03-21 15:46:43
最佳解答

這只是在告訴妳
"array[0]"和"*(array+0)"
是一樣意思
也就是說"array"也是個指標的意思

kradark iT邦好手 1 級 ‧ 2012-03-22 19:45:34 檢舉

補充說明,說明補充。

許多C Programmer並不熟悉如何使用指標,約耳趣談軟體的作者(叫約耳吧!?廢話!!)領悟到C的指標並不只是種技能,還需要天份,許多大一的資訊工程系學生,或多或少對於電腦有興趣,甚至小時候學過
BASIC、網頁設計。直到有一天教授開始介紹指標,突然間就完全投降,開始說他們對於Programming沒有興趣。

作者表示,大多數人出生時大腦就缺乏理解指標的部份,因為需要複雜的雙重間接思
考。我用「雙重間接思考」goo了一下,果其然第一篇就是C的雙重指標:

http://caterpillar.onlyfun.net/Gossip/CppGossip/DoublePointer.html
大概不少人的頸部以上到這邊就投降了吧。

不過你也不要難過,VB.net跟Java都可以不用指標,不過這些語言的發明,都搶了我們C/C++ Programmer許多工作,對資工本科系的學生,並不見得是件好事。

kradark iT邦好手 1 級 ‧ 2012-03-22 19:48:38 檢舉

Sorry 以上是回應原發文者(匿名)的。並以作者約耳的說法補充cdfu總裁的建議。
並不代表本人(kradark)立場。

溜~逃跑

8
kradark
iT邦好手 1 級 ‧ 2012-03-21 21:22:05

printf

int printf ( const char * format, ... );
這是個不定個數的函數,算C/C++比較難懂的一個部分,
C#變成params了,
這邊只要知道,count,array[count],count,*(array+count)不能刪掉,
不然%d塞甚麼進去我也不知道...

總裁 iT邦好手 1 級 ‧ 2012-03-22 13:47:02 檢舉

真奇怪,這樣compile沒有warning嗎??

kradark iT邦好手 1 級 ‧ 2012-03-22 19:52:34 檢舉

這就不太清楚了,故意刪掉不至於,但偶而會少打一兩個參數,
反正printf錯誤很容易發現,因為都有輸出。有沒有warning都很容易發現。

8
cflin
iT邦新手 4 級 ‧ 2012-03-22 08:19:12

printf 的" " 裡面,一個 %d 搭配後面你要印的資料。
這是基本 printf 的用法,根本跟陣列與指標無關。
你把count,array[count],count,*(array+count) 拿掉,
%d 就不能搭配要印的東西,他就印出牠內定的值。這也不是陣列的位址。

建議先看懂 printf 的用法吧。

我要發表回答

立即登入回答