可以。。
例子如下:
# 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