我想了解數組和指針之間存在的特殊關係,即沒有括號的數組名稱總是指向數組的第一個元素。char數組和指針 - 有人可以解釋下面的輸出嗎?
在Linux系統上,我得到這個與C程序:
char name[7] = "unique";
printf("\nAddress stored of name: %p", name);
printf("\nAddress stored of name: %s", name); //Conflict
printf("\nAddress of name[0]: %p", &name[0]);
//dereferencing the pointer
printf("\nValue of name[0]: %c", *name);
printf("\nValue of name[1]: %c", *(name+1));
輸出是:
Address stored of name: 0xbff68131
Address stored of name: unique
Address of name[0]: 0xbff68131
Value of name[0]: u
Value of name[1]: n
我瞭解在上面的輸出以外的所有的代碼行的輸出其中//衝突。換句話說,如果名稱相當於&名稱[0]爲每個陣列和指針之間的特殊關係,那麼爲什麼簡單地改變格式說明(從%P爲%s)打印陣列的實際值。如果確實如此,那麼這是否意味着名稱,&名稱[0]和*名稱是否都等同?
我會至少期望它(/衝突)打印一些其他(垃圾?)值,但不是數組的實際值。
「爲什麼只是更改格式說明...打印實際值」?因爲這是選擇不同格式說明符的關鍵。不同的格式說明符告訴'printf'以不同的方式處理相應的參數。 – jamesdlin 2013-03-05 02:53:21
或者想一想:如果你使用'%d'打印'int'而不是'%X',那麼對於相同的數值你會得到不同的輸出。那麼,爲什麼讓你感到驚訝的是,不同的格式說明符可能會打印對同一地址的不同解釋? – jamesdlin 2013-03-05 03:01:35
@jamesdlin我明白,不同的格式說明符會打印不同的值,我承認已經在我的問題 - 「我會至少期望它(/衝突)打印一些其他(垃圾?)值,但不是實際值陣列「。也許我誤解了這裏的點和數組關係。 – modest 2013-03-05 03:23:26