C 动态数组相关

C语言通过动态申请内存空间来实现动态数组 需要用到calloc方法或malloc方法

calloc方法

  • 被包含在stdlib.h头文件中
  • 分配和初始化数组
  • void * calloc(size_t num,size_t size);
  • 分配一块内存给有nun个元素的数组,它们中的元素每个为size大小,并且其所有位初始化为零。
  • 有效的结果是分配零初始化的(num*size)字节的内存块。
  • 如果大小为零,则返回值取决于特定的库实现(它可能是也可能不是空指针),但返回的指针不应被解除引用。
参数
  • num
    • 要分配的元素个数
  • size
    • 每个元素的大小
  • size_t是一个无符号整型
返回值
  • 成功时,指向由该功能分配的内存块的指针。
  • 该指针的类型总是void*可以转换为所需类型的数据指针,以便被解引用。
  • 如果函数未能分配请求的内存块,则返回空指针
动态数组的实现
//动态数组的实现
#include <stdio.h>
#include <stdlib.h>

int main(){
    int n,i;
    scanf("%d",&n);                      //输入数组的大小

    int *p = (int*)calloc(n,sizeof(int));//申请了一个长度为n的数组,用p指向
    for(i = 0;i < n;i++)
        scanf("%d",p+i);                 //输入数组
    for(i = 0;i < n;i++)
    printf("%d ",*(p+i));                //打印数组
    free(p);                             //申请释放空间
    p = NULL;
    return 0;
}

malloc 方法

  • 被包含在stdlib.h头文件中
  • 分配内存块
  • void * malloc(size_t size);
  • 分配size大小的内存块,将指针返回到块的开头
  • 新分配的内存块的内容不被初始化,剩下不确定的值。
  • 如果大小为零,则返回值取决于特定的库实现(它可能是也可能不是空指针),但返回的指针不应被解除引用。
参数
  • size
    • 内存块的大小,以字节为单位
    • size_t是一个无符号整型
返回值
  • 成功时,指向由该功能分配的内存块的指针。
  • 该指针的类型总是void*可以转换为所需类型的数据指针,以便被解引用。
  • 如果函数未能分配请求的内存块,则返回空指针
malloc实现
//一个随机的字符串生成代码
#include <stdio.h>  /* 包含 printf scanf NULL */
#include <stdlib.h> /* 包含 malloc free rand exit */

int main(){
    int i,n;
    char * buffer;

    printf("你想要多长的字符串\n");
    scanf("%d",&i);

    buffer = (char*) malloc(i-1);
    if(buffer == NULL) exit(1); //程序非正常退出

    for(n = 0;n < i;n++)
        buffer[n] = rand()%26 + 'a'; //产生随机字符
    buffer[i] = '\0';

    printf("随机字符串为:%s\n",buffer);
    free(buffer);               //释放buffer指向的内存
    buffer = NULL;              //防止出现再次释放的错误将其设为空

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值