动态数组-

1.全局变量

不在必要时不使用全局变量:全局变量在程序整个执行过程中都占用储存空间;使函数的通用性降低;降低程序的可读性。

全局变量均存放在静态储存区。

2.堆和栈

3.malloc函数

eg:静态数组和动态数组
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[10] = { 1,2,3,4,5,6,7 }; // 静态数组,大小为10,包含部分初始化的元素

    int* p = (int*)malloc(sizeof(int) * 10);
    // 动态分配内存空间,大小为10个整数(40字节)
    p[1] = 12; // 修改动态分配的内存空间中的第二个元素为12

    printf("%d\n", p[1]); // 输出动态分配的内存空间中的第二个元素的值,应该输出12

    free(p); // 释放动态分配的内存空间

    return 0; // 程序结束
}
     
eg:建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	void check(int*);
	int* p1, i;
	p1 = (int*)malloc(5 * sizeof(int));
	for (i = 0; i < 5; i++) 
		scanf("%d", p1 + i);
	check(p1);
	return 0;
}

主函数中,声明了一个名为check的函数(返回类型为void,接受一个int型指针作为参数)。接着声明了一个整型指针p1和一个整型变量i。使用malloc函数动态地分配了一个能够存储5个整数的内存空间,并将其地址赋给p1指针。接下来通过for循环,使用scanf函数从用户输入获取5个整数,并依次存储到p1所指向的内存空间中。最后调用check函数,并传入p1指针作为实参。最后返回0,表示程序正常结束。

void check(int* p)
{
	int i;
	printf("They are fail:");
	for (i = 0; i < 5; i++) 
		if (p[i] < 60)
			printf("%d", p[i]);
	printf("\n");
}

 这部分是定义了一个名为check的函数。该函数接受一个int型指针p作为参数,返回类型为void,即不返回任何值。在函数体内,声明了一个整型变量i。接下来使用循环遍历p指针所指向的内存空间的内容

报错:表达式必须含有常量值

注意:在C语言中,结构体数组的长度必须是一个常量值,不能使用变量作为数组长度。

如:第一行是一个N,代表有N个评委。然后第二行有N个数,每个数用空格隔开,代表每个评委的打分。

4.动态数组基本操作
1.问题
 2.思路/初始化

(1)记录首地址 (2)可储存数据总量与已储存数据总量的大小关系

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
	int* p1; // 记录动态数组首地址
	unsigned int x; // 记录容量
	unsigned int y; // 已储存数量
} dongshuzu;

void chushihua(dongshuzu* pshuzu) // 初始化赋值
{
	pshuzu->x = 5;
	pshuzu->p1 = (int*)malloc(sizeof(int) * pshuzu->x);
	pshuzu->y = 0;
}

int main()
{
	dongshuzu shuzu;
	chushihua(&shuzu);

	free(shuzu.p1);
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值