C语言可以实现为一维数组动态分配内存吗?

Python021

C语言可以实现为一维数组动态分配内存吗?,第1张

可以。。

例子如下:

# include <stdio.h>

# include <malloc.h>

void main(void)

{

int len,i, *p

printf("输入要存放元素的个数:")

scanf("%d", &len)//输入长度构造动态一维数组

p = (int *)malloc(sizeof(int)*5)

for(i=0i<len++i)

scanf("%d",(p+i))// p+i等同于&p[i]

// 将动态一维数组p的长度增加至6,并将第6个元素赋值为100

realloc(p,sizeof(int)*6)//realloc重新增加或减少一维数组的长度;

p[5] = 99

printf("输出内容:\n")

for(i=0i<=len++i)

printf("%-5d", p[i])//p[i]等同于*(p+i)

printf("\n")

第一个是在栈上分配:就是在函数调用栈所在的那个栈上

第二个是在“堆区”分配。

#include<stdio.h>

#include<stdlib.h>

#define LENGTH 20

int main()

{

    int str_num

    scanf("%d",&str_num)

    char (*str_arr)[LENGTH] = (char(*)[LENGTH])malloc(sizeof(char)*LENGTH*str_num)

    for(int i=0i<str_numi++)

    {

        scanf("%s",str_arr[i])

    }

}

pArray2=(int**)malloc(sizeof(int*[3])) //分配了3个int*的空间,32地址环境下指针的长度都是32位的也就是4字节,那3个int*就是12字节,和3个int长度是一样的,凑巧而已

也可以写成这样:

pArray2=(int**)malloc(3*sizeof(int*)) //分配3个int*的空间

现在pArray2指向的有效空间内包含3个指针,这3个指针是int*,也就是指向int的指针,这3个指针的值是随机的,还不能用,先要让它们指向合适的空间才行

于是就有:

for(....)

*(pArray2+i)=(int*)malloc(sizeof(int[3]))//这就是给pArray2指向的空间内的3个指针校正方向,让每一个指针指向由3个int整数组成的数组的首地址,这才是最终的数据空间

和pArray2一样,也可以写成:

*(pArray2+i)=(int*)malloc(3*sizeof(int)) //3个int