在c中返回一个数组
我想知道是否有任何方法可以返回一个char数组。 我试过这样的“char [] fun()”,但我收到了错误。
我不想要指针解决方案。 谢谢!
您可以通过将数据包装在结构中来返回数组:
struct S { char a[100]; }; struct S f() { struct S s; strcpy( sa, "foobar" ); return s; }
数组不能通过C中的值传递或返回。
您需要接受指针和缓冲区的大小来存储结果,否则您将不得不返回不同的类型,例如指针。 前者通常是首选,但并不总是适合。
C函数不能返回数组类型。 函数返回类型可以是“T数组”或“函数返回T”以外的任何类型。 另请注意,您无法分配数组类型; 即,像下面这样的代码将不起作用:
int a[10]; a = foo();
C中的数组与其他类型的处理方式不同; 在大多数上下文中,数组表达式的类型从“N元素数组T”隐式转换(“衰减”)到“指向T”,其值设置为指向数组中的第一个元素。 此规则的例外情况是,数组表达式是sizeof
或address-of( &
)运算符的操作数,或者表达式是用于初始化声明中的另一个数组的字符串文字。
鉴于声明
T a[N];
对于任何类型T,则以下情况属实:
表达类型衰减到Notes ---------- ---- --------- ----- a T [N] T * Value是第一个元素的地址 &a T(*)[N] n / a值是数组的地址(其中 与地址相同 第一个元素,但类型是 不同) sizeof a size_t n / a array =中的字节数(字符) N * sizeof(T) sizeof a [i] size_t n / a单个元素中的字节数= 的sizeof(T) a [i] T n / a第i个元素的值 &a [i] T * n / a第i个元素的地址
由于隐式转换规则,当您将数组参数传递给函数时,函数接收的是指针值,而不是数组值:
int a[10]; ... foo(a); ... void foo(int *a) { // do something with a }
还要注意做类似的事情
int *foo(void) { int arr[N]; ... return arr; }
不起作用; 一个函数退出,数组arr
技术上不再存在,并且在你有机会使用它之前它的内容可能会被覆盖。
如果您不是动态分配缓冲区,最好的办法是将要修改的数组作为参数传递给函数及其大小(因为函数只接收指针值,它无法判断数组有多大):
int a[10]; init(a, sizeof a / sizeof a[0]); // divide the total number of bytes in ... // in the array by the number of bytes void init(int *a, size_t len) // a single element to get the number { // of elements size_t i; for (i = 0; i < len; i++) a[i] = i; }
数组不是C语言中的第一类对象,你必须通过指针处理它们,如果在你的函数中创建数组,你还必须确保它在堆上并且调用者清理内存
一个非常非常基本的代码和非常非常基本的解释如何将数组从用户定义的函数返回到main函数。希望它有帮助!! 下面我给出了完整的代码,让任何人都能理解它是如何工作的? 🙂 🙂
#include using namespace std; char * function_Random() { int i; char arr[2]; char j=65;//an ascII value 65=A and 66=B cout<<"We are Inside FunctionRandom"<