//不需要数组,指针可以当成数组用
#include <stdio.h>
#include <stdlib.h>
int main()
{
//变量定义
int max;
int *p;
int i = 0;
int number;
//提示输入最大值
printf("请输入数组最大值:");
if(scanf("%d",&max) != 1){
printf("数组最大值键入失败\n");
exit();
}
//申请地址
p = (int *)malloc(max * sizeof(int));
//判断地址申请成功与否
if(p==NULL){
printf("地址申请失败\n");
exit(-1);
}
//给数组赋值
printf("请给数组元素赋值(q退出):\n");
while(i<max && scanf("%d",(p+i))==1){
++i;
}
//格式化输出
printf("这是输入的%d个值\n", number = i);
for(i=0; i<max; i++){
printf("%-3d", *(p+i));
if(i%5==4){
printf("\n");
}
}
if(i%5 != 0){
printf("\n");
}
printf("结束\n");
return 0;
}
学习到:
- 思路:(用指针指向申请的内存首地址(相当于数组))
1定义用于指向申请内存地址的指针
2确定内存的最大值(或者说容量)
判断赋值是否成功
3用malloc申请地址
判断申请地址是否成功
4给申请的地址内容赋值
5格式化输出 - scanf函数
- 返回值:成功键入的数据个数
可以作if参数,判断是否键入成功
可以作while循环的参数,作为循环的截止条件
- exit与return
区别:exit是函数,return是关键字
1exit让程序结束
return若是非主函数中,则返回上一级;若是主函数,则程序结束
4.malloc函数
- 在头文件<stdlib.h>中
- 参数是申请的地址大小
- 返回值是无类型指针(void *),所以需要进行一下强制类型转换
eg:
int *p = (int *)malloc(5 * sizeof(int );
- 两个格式化输出语句
if(i%5==4){ //i从0开始
printf("\n");
}
if(i%5 != 0){
printf("\n")
}
两个相互配合,达到无论输入多少个都会有换行符输出。
当输入个数正好是5的倍数时,上面会输入换行;当上面不是4的倍数时,下面的if会输入换行