繁体   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