与函数不能返回数组密切相关的事实是,C语言没有严格意义上的“数组类型”。可能从C语言代码角度来看,似乎有数组类型的变量。 但是如果尝试将该变量像其他变量一样使用,得到的实际上是指向数组第一个元素的指针。例如下面这段C语言代码: char a[10], b[10]; a= b; 这并不能把数组 b 的内容拷贝给数组 a,...
2 当一维数组不是静态类型,即不存在static修饰时,数组为局部变量,这时不能将数组名返回。当把数组名返回时,实际上是返回了数组的首地址,后续继续使用该地址指向的内存。如果数组为局部变量,那么按照C语言的规则,该段地址在退出函数后,会被释放,并可能被系统做其它用途,这样再继续访问该段地址就...
在C语言程序开发中,我们不可以编写下面这样的代码: charf(void)[8]{ charret; // ...fill... returnret; } intmain(intargc, char** argv){ charobj_a[10]; obj_a = f; } 不可以编写这样的代码 这其实就是不能...
与函数不能返回数组密切相关的事实是,C语言没有严格意义上的“数组类型”。可能从C语言代码角度来看,似乎有数组类型的变量,但是如果尝试将该变量像其他变量一样使用,得到的实际上是指向数组第一个元素的指针。例如下面这段C语言代码: char a[10], b[10];a = b; 这并不能把数组 b 的内容拷贝给数组 a,实际...
不可以编写这样的代码 这其实就是不能在C语言函数中返回数组。但是如果将数组定义在结构体里面,就可以将其返回了,例如下面这段C语言代码,请看: struct s { char arr[10]; };struct s f(void) { struct s ret; // ...fill... return ret;}int main(int argc, char ** argv) { struct s obj_a...
这里假设 f() 是一个返回数组的函数,它的核心C语言代码如下: char ret[10];/* ... fill ... */return ret; 不过按照前面所说的,其实上面的返回语句相当于下面这一句: return &ret[0]; 同样的,我们若是尝试将数组赋值给 a,最终实际得到仍然是将指针赋值给 a,熟悉C语言语法的读者应该能够看出不妥之处...
这其实就是不能在C语言函数中返回数组。但是如果将数组定义在结构体里面,就可以将其返回了,例如下面这段C语言代码,请看: structs{chararr[10]; };struct sf(void){structsret;// ...fill...returnret;}intmain(intargc,char** argv){structsobj_a;obj_a = f;} ...