C语言学习之路--第五站 数组内容补充

113 阅读2分钟

在之前的学习中没有学习到指针的内容,因此跳过了 从函数中返回数组 , 以及 指向数组的指针 内容。

从函数返回数组

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

  • 想要返回数组,需要声明一个返回指针的函数 例如: int * myFunction(){}
  • 不支持返回局部变量,返回 全局 或者添加关键词 static

下面再学习一个生成随机数的方法。用一个方法同时测试

rand()用来生成随机数, srand()是设置种子 。在开头增加 #include<time.h>的声明来调用time函数,使用本地时间做种子,使得随机更加随机。

//生成和返回随机数的函数
int * getRandom()
{

static int r[10];
int i; 

//设置种子
srand((unsigned)time(NULL));
for (i = 0; i < 5; i++)
{
	r[i] = rand();
	printf("r[%d] = %d \n", i, r[i]);
}

return r; 

}

image.png

指向数组的指针

  • 这里增加一个概念, 数组名是一个指向数组中第一个元素的常量指针。 在 double balance[50]; 的声明中, balance 是一个指向 &balance[0] 的指针。
  • *(balance + 4) 是一种合法的访问数据的方式

下面照例进行一个方法演示:

  • 这里学习到一个知识点, printf() 只能看到双精度数, %f 总是得到double , double比float 精度是存储了更多的小数位。但是输出默认是6位小数,如果要输出更多小数,可以自己控制,比如 %.10lf 输出十位。

      int enum_array_demo()
      {
          double balance[5] = { 122.3 , 2.3 , 4.1 , 4.3 , 5.5 };
          double* p;
    
          p = balance;
          printf("使用指针的数组值:\n");
          for (int a = 0; a < 5; a++)
          {
                  printf("*(p + %d ) : %f \n", a, *(p + a));
          }
    
          printf("使用 banlance 的数组值:\n");
          for (int a = 0; a < 5; a++)
          {
                  printf("*(p + %d ) : %.1lf \n", a, *(balance + a));
    
          }
    
      }
    

image.png

数组剩余部分在这里基础部分学习完毕,接下来学习函数指针与回调函数。