簡體   English   中英

C / C ++指針作為/在函數中

[英]C/C++ pointers as/in functions

這是一個非常新手的問題,但是我注意到一些C函數的形式為:

int* foo(int *N){...}

有人可以:

a)解釋int * foo是什么意思? 在一個這樣的函數中,沒有return語句。

b)解釋int * N有多靈活? 即,我知道這意味着該參數是一個指向int的指針,但是從我對一個這樣的函數的了解來看,這意味着該函數foo實際上可以采用矢量參數。 這對我來說毫無意義。

a)解釋int* foo是什么意思? 在一個這樣的函數中,沒有return語句。

這意味着foo是一個返回int指針的函數。 如果此類函數沒有return語句,則調用該函數將導致未定義的行為。

從C ++標准:

6.6.3 return語句

...

從函數末尾流出就等於沒有值的返回; 這導致返回值函數中的行為不確定。

b)解釋int *N有多靈活?

那取決於foo的實現。 在語法上,以下是調用foo有效方法。 它們在語義上是否有效取決於foo

int a;
int b[10];
int* c = new int;
int* d = new int[20];

foo(&a);
foo(b);
foo(c);
foo(d);
foo(nullptr);

int* foo(int *N)是一個使用指針的函數,該指針至少指向一個int,但可能指向整數數組,在這種情況下C有點草率。

{
   int n = 0;
   foo(&n);
}

或者可能

{
   int a[17];
   foo(a);
}

在此示例中,foo是指向帶有一個參數的函數的指針,即整數指針,並返回int。 就像您要聲明一個名為“ * foo”的函數一樣,該函數需要一個整數指針並返回一個整數。 現在,如果* foo是一個函數,則foo必須是一個指向函數的指針。

編寫函數指針的聲明的關鍵是,您只是寫出函數的聲明,但帶有(* func_name)的位置通常只是放了func_name。

暫無
暫無

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

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