[英]Passing a pointer to a function in C
函數聲明為
void function (char *);
如果p是一個char指針,那么這兩個函數調用之間有什么區別。
function (p)
和
function ((char **) &p)
他們倆都一樣嗎?
我要感謝堆棧溢出系列提供有關此主題的任何信息。
如果我的內存沒有欺騙我,則void function ((char **) &p)
不是有效的C語法。 與有效性最接近的是刪除內部(
和)
並作為C ++進行編譯,然后它將作為對char指針的指針的引用。
第一個只是“普通”字符指針。
你打電話時:
function(p);
function
代碼可以在p
指向的位置讀取char
數組(即字符串)的內容,單個char
變量或所需的任何數據。
你打電話時:
function((char **) &p);
編譯器將抱怨:
warning: incompatible pointer types passing 'char **' to parameter of
type 'char *'
因為&p
屬於char **
類型(實際上,不需要顯式轉換(char **)
),即,指向char
的指針的指針,而在函數聲明中有char *
即指向char
指針。 在運行時, function
不會按預期讀取字符串或單個字符,但會像對待字符串一樣讀取指向char
的指針的字節(可能導致崩潰)。
您的想法很不錯:賦值時,運算符*
和&
互相取消,但不能像*
和/
一樣在聲明中出現,但是標頭是:
void function ((char **) &p);
不能由C編譯器編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.