了解 returns 指向数组的指针函数
Understanding a pointer function that returns a pointer to an array
所以,我只是想围绕“return 是一个指向数组的指针的指针函数”...但是为了慢慢开始,我必须理解这一点:
void Print(const char c){
printf("\nPrint: %c\n", c);
}
int main () {
void (*FunctionPointer)(const char);
FunctionPointer = &Print;
FunctionPointer('a');
}
我这样做 - 很容易猜到发生了什么...... FunctionPointer 只是指向 Print 函数“驻留”的位置。我现在可以更灵活地指向我想访问的任何函数,而不是跳转到特定函数的特定内存地址(存储在寄存器中)。
但我坚持以下...
int main () {
int (*FunctionPointer())[];
}
现在看来,FunctionPointer指向的函数,其实可以return一个指向int类型数组的指针。编译器接受第二行 - 到目前为止一切顺利 - 我也理解这个概念......但我在实现方面遇到了困难。
FunctionPointer 需要 - 再次指向一个函数。该函数确实可以 return 一个指向 int 类型数组的指针...soooooo:
int *Array(){
int ar[2] = {5,6};
return ar;
}
int main () {
int (*FunctionPointer())[];
FunctionPointer = &Array;
}
然而,最后一段代码只是不被编译器接受....所以,是什么给了?
您已经声明了函数指针数组。数组不能赋值。函数不能 return 数组。你可能希望
int* (*FunctionPointer)();
FunctionPointer = &Array;
有
int (*FunctionPointer())[];
您已将 FunctionPointer
声明为 函数 return 指向 int 数组的指针 -- 而不是函数指针。你要
int *(*FunctionPointer)();
如果你在这里使用 []
,你会得到一个错误,因为函数不能 return 数组——数组不是第一个 class 类型——并且不像 with函数参数,当用作函数类型的 return 值时,数组不会自动转换为指针。这样,您仍然会收到警告
t.c:3:12: warning: function returns address of local variable [-Wreturn-local-addr]
return ar;
^~
漂亮self-explanatory
当您使用 typedef 时,函数指针会更容易。您可以简单地使用与“普通”数据指针相同的表示法。
// func is a function type. It has one parater and returns pointer to int
typedef int *func(const char);
// funcptr is a pointer to func
func *funcptr;
所以,我只是想围绕“return 是一个指向数组的指针的指针函数”...但是为了慢慢开始,我必须理解这一点:
void Print(const char c){
printf("\nPrint: %c\n", c);
}
int main () {
void (*FunctionPointer)(const char);
FunctionPointer = &Print;
FunctionPointer('a');
}
我这样做 - 很容易猜到发生了什么...... FunctionPointer 只是指向 Print 函数“驻留”的位置。我现在可以更灵活地指向我想访问的任何函数,而不是跳转到特定函数的特定内存地址(存储在寄存器中)。
但我坚持以下...
int main () {
int (*FunctionPointer())[];
}
现在看来,FunctionPointer指向的函数,其实可以return一个指向int类型数组的指针。编译器接受第二行 - 到目前为止一切顺利 - 我也理解这个概念......但我在实现方面遇到了困难。
FunctionPointer 需要 - 再次指向一个函数。该函数确实可以 return 一个指向 int 类型数组的指针...soooooo:
int *Array(){
int ar[2] = {5,6};
return ar;
}
int main () {
int (*FunctionPointer())[];
FunctionPointer = &Array;
}
然而,最后一段代码只是不被编译器接受....所以,是什么给了?
您已经声明了函数指针数组。数组不能赋值。函数不能 return 数组。你可能希望
int* (*FunctionPointer)();
FunctionPointer = &Array;
有
int (*FunctionPointer())[];
您已将 FunctionPointer
声明为 函数 return 指向 int 数组的指针 -- 而不是函数指针。你要
int *(*FunctionPointer)();
如果你在这里使用 []
,你会得到一个错误,因为函数不能 return 数组——数组不是第一个 class 类型——并且不像 with函数参数,当用作函数类型的 return 值时,数组不会自动转换为指针。这样,您仍然会收到警告
t.c:3:12: warning: function returns address of local variable [-Wreturn-local-addr]
return ar;
^~
漂亮self-explanatory
当您使用 typedef 时,函数指针会更容易。您可以简单地使用与“普通”数据指针相同的表示法。
// func is a function type. It has one parater and returns pointer to int
typedef int *func(const char);
// funcptr is a pointer to func
func *funcptr;