簡體   English   中英

將指針傳遞給C中的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM