动态数组

//不需要数组,指针可以当成数组用 
#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. 思路:(用指针指向申请的内存首地址(相当于数组))
    1定义用于指向申请内存地址的指针
    2确定内存的最大值(或者说容量)
    判断赋值是否成功
    3用malloc申请地址
    判断申请地址是否成功
    4给申请的地址内容赋值
    5格式化输出
  2. scanf函数
  • 返回值:成功键入的数据个数
    可以作if参数,判断是否键入成功
    可以作while循环的参数,作为循环的截止条件
  1. exit与return
    区别:exit是函数,return是关键字
    1exit让程序结束
    return若是非主函数中,则返回上一级;若是主函数,则程序结束
    4.malloc函数
  • 在头文件<stdlib.h>中
  • 参数是申请的地址大小
  • 返回值是无类型指针(void *),所以需要进行一下强制类型转换
    eg:
    int *p = (int *)malloc(5 * sizeof(int );
  1. 两个格式化输出语句
    if(i%5==4){ //i从0开始
    printf("\n");
    }
    if(i%5 != 0){
    printf("\n")
    }
    两个相互配合,达到无论输入多少个都会有换行符输出。
    当输入个数正好是5的倍数时,上面会输入换行;当上面不是4的倍数时,下面的if会输入换行
posted @   行至为成  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示