在之前的学习中没有学习到指针的内容,因此跳过了 从函数中返回数组 , 以及 指向数组的指针 内容。
从函数返回数组
在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;
}
指向数组的指针
- 这里增加一个概念, 数组名是一个指向数组中第一个元素的常量指针。 在
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)); } }
数组剩余部分在这里基础部分学习完毕,接下来学习函数指针与回调函数。