簡體   English   中英

C函數指針混亂,什么是“變量的指針級別”?

[英]C function pointer confusion, what is meant by “pointer level of the variable”?

這是代碼:

char *(*strcpy_ptr)(char *dst, const char *src); Pointer to strcpy-like function

教程說:

請注意上述聲明中* strcpy_ptr的括號。 它們將指示返回類型(char *)的星號與指示變量的指針級別的星號(* strcpy_ptr —一級,指向函數的指針)分開。

我迷路了-“功能指針”在哪里,“指針級別”在哪里?

您正在聲明一個變量strcpy_ptr 您希望此變量是指向返回char*的函數的指針。 如果您這樣做是在沒有括號的情況下進行的:

char **strcpy_ptr(char *dst, const char *src);

這將是返回char**的函數的原型 -不是您想要的。 圓括號將用變量將一顆恆星分組,並將該恆星與返回類型分開。

請記住,指針的聲明是這樣的:

T *var;

其中T是某種類型。 添加的星星越多,在最終達到實際T之前添加的間接層越多。 因此char **c將是一個指向char的指針。 對於函數指針,這是相同的: Tchar* ,而*var必須用括號分隔,因為C忽略空格。 C剛剛添加了一些額外的語法來指定指針所指向的函數類型和參數數量。 這只是C工作方式的一部分。

沒有括號,您將擁有:** strcpy_ptr

這是指向指針或雙向間接尋址的指針。 我認為“一個級別”意味着只有一個間接級別。

@Adel:以上注釋的所有大部分都是有意義的(有一些挑剔的異常,例如C不能理解空白),我仍然建議您閱讀Kernighan和Ritchie撰寫的“ C編程語言”,第二版,第二章5.11以及特別是第5.12章(復雜表達式-p122):您會發現很多復雜的示例,理解每個示例都很重要。

特別是,了解以下兩者之間的區別:

  1. 字符(*(* x())[])()

2.char(*(* x [])())[]

cforfun。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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