C语言学习 二维数组 指针数组 函数指针
1.指针数组指针数组:char *p={ar,&n,NULL}; //每个元素都是char*,成员都是一级指针
一级指针:int*p=&n; //一级指针变量p,指向普通变量,为了远程操控普通变量储存的数据
二级指针:char**c=&p; //二级指针变量c,指向一级指针变量p,操控一级指针指向其他地址
malloc堆内申请
在栈内申请一个变量:int i =10;
在堆内申请一个变量:int *i=(int*)malloc(sizeof(int)), *i=10;
-
在栈内申请一个数组:int i ;
在堆内申请一个数组:int *i=(int*)malloc(sizeof(int)*10)
-
在栈内申请一个指针数组:int *i ;
在堆内申请一个指针数组:int **i=(int**)malloc(sizeof(int*)*10)
2.二维数组
二维数组:int n;//意思是有3个一维数组,每个一维数组有12个元素
初始化:int n={{1,2,3},{4,5},{1}};//用双层大括号初始化,缺省默认为0
行指针:可以指向二维数组int (*p)=ar
srand函数和sand函数:
srand函数是随机数发生器的初始化函数,如果去掉srand,那么无论何时运行这个程序,都会产生10个相同的数。
sand函数是产生随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(0));
int i;
int n = 0;
while (n < 3)
{
int j = 0;
while (j < 12)
{
i = 300 + rand() % 500 + 1;//随机生成300-801之间的数字
j++;
}
n++;
}
//在生成所有二维数组的数据后,按照3行12列输出每年每月的费用支出
n = 0;
while (n < 3)
{
printf("第%d年:\n", n+1);
int j = 0;
while (j < 12)
{
printf("%d",i);
j++;
}
puts("\n");
n++;
}
//统计三年中,36个月每月平局支出费用
n = 0;
double d = 0;
while (n < 3)
{
int j = 0;
while (j < 12)
{
d += i;
j++;
}
n++;
}
printf("3年平局每个月支出%0.2lf元\n", d / 36);
//统计每一年的支出费用和每月平局支出费用
n = 0;
while (n < 3)
{
double d = 0;
int j = 0;
while (j < 12)
{
d += i;
j++;
}
printf("第%d年总支出是%0.lf元,平局每个月支出%0.2lf元\n",n+1,d, d / 12);
n++;
}
//统计3年中,一月的平局费用,哪一年的一月支出费用高...十二月的平均费用,哪一年的十二月支出费用高
int j = 0;
double t = 0;
int k = 0;
while (j<12)
{
double d = 0;
int n = 0;
while (n<3)
{
d += i;
n++;
}
if (d > t)
{
t = d;
k = n;
}
printf("平局3年%d月支出%0.2lf元\n",j+1,d/3);
j++;
}
printf("3年中支出最多的月份是%d,平均%0.2lf元\n",k + 1, t/3);
return 0;
}
把各个条件定义成函数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void random(int i[])
{
srand((unsigned)time(0));
int n = 0;
while (n < 3)
{
int j = 0;
while (j < 12)
{
i = 300 + rand() % 500 + 1;//随机生成300-801之间的数字
j++;
}
n++;
}
}
void print(int i[])
{
int n = 0;
while (n < 3)
{
printf("第%d年:\n", n + 1);
int j = 0;
while (j < 12)
{
printf("%d", i);
j++;
}
puts("\n");
n++;
}
}
void moth(int i[])
{
int n = 0;
double d = 0;
while (n < 3)
{
int j = 0;
while (j < 12)
{
d += i;
j++;
}
n++;
}
printf("3年平局每个月支出%0.2lf元\n", d / 36);
}
void sss(int i[])
{
int n = 0;
while (n < 3)
{
double d = 0;
int j = 0;
while (j < 12)
{
d += i;
j++;
}
printf("第%d年总支出是%0.lf元,平局每个月支出%0.2lf元\n", n + 1, d, d / 12);
n++;
}
}
void ssss(int i[])
{
int j = 0;
double t = 0;
int k = 0;
while (j < 12)
{
double d = 0;
int n = 0;
while (n < 3)
{
d += i;
n++;
}
if (d > t)
{
t = d;
k = n;
}
printf("平局3年%d月支出%0.2lf元\n", j + 1, d / 3);
j++;
}
printf("3年中支出最多的月份是%d,平均%0.2lf元\n", k + 1, t / 3);
}
int main()
{
int i;
random(i);
print(i);
moth(i);
sss(i);
ssss(i);
return 0;
}
3.函数指针
定义:int (*ps)(int ,int )
返回值类型 ( * 指针变量名) ([形参列表]);
首先我们来声明一个函数。
int del(int a, int b)
{
return a* b;
} 把函数名替换成指针表达式是创建指向函数指针最简单的方式:
int (*ps)(int a, int b); //声明函数指针,此时函数指针没有指向任何函数</span>这时,我们就已经完成了一个最简单的函数指针声明,其意义是:生命了一个函数指针,其指向的函数返回一个int值,带有两个int型参数。
接下来我们对函数指针进行初始化:
ps = del; //使函数指针指向del函数这样就完成了函数指针的初始化。接下来,我么就可以通过此函数指针引用此函数。
ps = del; //将函数指针ps指向del函数
printf("%d",(*ps)(4, 5));//调用指针函数进行运算,也可以写成ps(4,5)不过(*ps)(4,5)是标准写法
开始难了,这里要慢一点学 你的的代码中k = n; 错误
printf("3年中支出最多的月份是%d,平均%0.2lf元\n", k + 1, t / 3);输出是由问题,
n 表示的是年份,你应该是 k = j; 学习了,谢谢
页:
[1]