在這裏有關於SO指針的無數問題,以及互聯網上無數的資源,但我仍然無法理解這一點。指針的類型?
This answer報價A Tutorial on Pointers and Arrays in C: Chapter 3 - Pointers and Strings:
int puts(const char *s);
目前,忽略常量。傳遞給
puts()
的參數是一個指針,它是一個指針的值(因爲C中的所有參數都是按值傳遞的),而指針的值就是它指向的地址,或者簡單地說就是一個地址。因此,當我們按照我們所見寫puts(strA);
時,我們傳遞的地址是strA[0]
。
我根本不明白這一點。
爲什麼
puts()
需要指針到字符串常量?puts()
不修改並返回它的參數,只是將它寫入stdout
,然後該字符串被丟棄。忽略爲什麼,它是如何
puts()
的原型,它明確地需要一個指針到字符串常量,接受一個字符串文字,而不是指向一個?也就是說,爲什麼puts("hello world");
工作時puts()
的原型會顯示puts()
需要更像char hello[] = "hello world"; puts(&hello);
?如果你給,例如
printf()
一個指針爲一個字符串常量,這顯然是它想要什麼,GCC會抱怨,你的程序將段錯誤的,因爲:error: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[6]’
但給printf()
一個字符串常量,不是一個指向字符串的指針,工作正常。
This Programmers.SE question's answers對我很有意義。
回答這個問題的答案,指針只是代表內存中某個位置的數字。內存地址的數字是無符號整數,而C是用本地C和彙編寫的,所以指針只是體系結構定義的uint
s。
但這種情況並非如此,因爲編譯器是在其誤差約int
,int *
和int **
如何不同樣很清楚。它們是最終指向記憶中的某個途徑。
爲什麼需要一個指針功能接受的東西是不一個指針,拒絕指針?
我知道「字符串常量」實際上是一個字符數組,但我試圖在這裏簡化。
我已閱讀你的問題。這對我來說有點困惑。你能簡單地告訴我你所期望的嗎? –
@JafferWilson在那裏,我希望我已經說得更清楚 – cat
您可能想要了解一個數組傳遞給函數(C語言)時會發生什麼。 – alk