C++ 在函数中使用静态局部变量,让函数返回数组

简介: C++ 在函数中使用静态局部变量,让函数返回数组

C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。


如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:


int * myFunction() { . . . }


另外,C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。例如:


#include <iostream>

using namespace std;


int a[10] = { 10,20 };

char *GetCharArr()

{

   static char sss[20] = { 0 };

   sprintf_s(sss, "ABABXX%d", a[0]);


   cout << sss << endl;

   return sss;

}


int main()

{

   char *xxx;

   xxx = GetCharArr();

   printf("当前的字符串是:%s", xxx);

   system("PAUSE");

   return 0;

}

tt.png

另一个例子:


#include <iostream>

#include <ctime>

#include <cstdlib>


using namespace std;


// 要生成和返回随机数的函数

int *getRandom()

{

   static int  r[10];


   // 设置种子

   srand((unsigned)time(NULL));

   for (int i = 0; i < 10; ++i)

   {

       r[i] = rand();

       cout << r[i] << endl;

   }


   return r;

}


// 要调用上面定义函数的主函数

int main()

{

   // 一个指向整数的指针

   int *p;


   p = getRandom();

   for (int i = 0; i < 10; i++)

   {

       cout << "*(p + " << i << ") : ";

       cout << *(p + i) << endl;

   }


   return 0;

}

tt.png


目录
相关文章
|
7月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
194 0
|
10月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
516 6
|
12月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
272 5
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
538 6
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
146 3
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
324 0
C++ 多线程之线程管理函数
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
127 3
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
2519 1
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
205 1