gpt4 book ai didi

c - 错误调用的对象不是函数或函数指针

转载 作者:行者123 更新时间:2023-11-30 20:04:41 25 4
gpt4 key购买 nike

我有一段简单的代码,但有一个错误。我不明白为什么。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv){
int buffer[4]={1,2,3,4};
int** Matrix;
Matrix=Matrix(buffer);
}


int** Matrix(int* buffer){
int ** Matrix;
Matrix= malloc(sizeof(buffer)*sizeof(buffer));
int j,i;
for(j=0;j<sizeof(buffer)/sizeof(int);j++){
for(i=0;i<sizeof(buffer)/sizeof(int);i++){
Matrix[j][i]=buffer[i];}}
return Matrix;
}

编译此代码会产生错误

Error called object is not a function or function pointer

最佳答案

在主线

int main(int argc, char ** argv){
int buffer[4]={1,2,3,4};
int** Matrix;
Matrix=Matrix(buffer);
}

名称为 Matrix 的局部变量声明如下

    int** Matrix;

在声明中引用自身

    Matrix=Matrix(buffer);

但是这个表达式

Matrix(buffer)

在 C 中指针无效。

很明显,您指的是同名 Matrix 的函数。但在使用它之前,至少必须在全局命名空间中声明它。而且局部变量会隐藏函数的名称。

所以你应该为指针和函数使用不同的名称。

#include <stdio.h>
#include <stdlib.h>

int** Matrix(int* buffer);

int main(int argc, char ** argv){
int buffer[4]={1,2,3,4};
int** m;
m = Matrix(buffer);
}


int** Matrix(int* buffer){
//... the body of the function
}

考虑到函数本身也是不正确的。例如在这个声明中

for(j=0;j<sizeof(buffer)/sizeof(int);j++){

sizeof( buffer ) 并不意味着用作参数的数组的大小。它仅表示 int * 类型指针的大小例如表达式

sizeof(buffer)/sizeof(int)

可能等于 2 或 1,具体取决于 sizeof( int * ) 等于 8 还是 4,相应地 sizeof( int ) 也等于 8或到 4。

关于c - 错误调用的对象不是函数或函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com