首页
社区
课程
招聘
[旧帖] [求助]C语言数组 0.00雪花
发表于: 2010-11-13 09:32 1240

[旧帖] [求助]C语言数组 0.00雪花

2010-11-13 09:32
1240
在C语言中能否在程序运行时为数组分配大小?如果可以,该如何做?
恳请各位指教。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 99
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
貌似不可以的,曾经也是想动态分配来着
2010-11-13 09:41
0
雪    币: 439
活跃值: (1279)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
可以
malloc

int i;
int num = 50;
int *ptd;
ptd = (int*)malloc(num * sizeof(int));

这段代码请求50个int类型的空间,并把ptd指向该空间所在位置
注意!ptd是作为指向一个int类型值的指针声明的,而不是指向50个int类型值的数据块的指针。
记住!数组的名字是它第一个元素的地址。因此,如果您令ptd指向一个内存块的第一个元素,就可以像数组名一样使用它。

for(i = 0; i < num; i++)
{
    ptd[i] = i;
    printf("ptd[%d] = %d\n",i,ptd[i]);
}

记住!使用完毕后请释放该块内存。
free(ptd);

头文件需要引入
#include <stdlib.h>

上面这段程序里面那个num = 50;其实就是一个变量
可以在程序运行时获得。所以这样就实现了动态创建数组。
你可以将程序改写成
int num;
scanf(&num);
来动态创建一个数组
2010-11-13 09:47
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
4
如楼上所写,在堆空间中申请
2010-11-13 10:46
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
新手来学习的
2010-11-13 10:48
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
的确这样就好了,c里面用malloc哪一些函数,c++的话直接new。
不过这样也有限制。就是你只能申请一次啊,如果要分别申请多次而又想用同一个指针的话怎么办呢?
2010-11-13 10:56
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
当然有了,三楼正解
2010-11-13 12:00
0
雪    币: 710
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
新手来学习滴3楼的回答真的不错!3楼我顶一个、、、原来你不是一个传说。呵呵
2010-11-13 12:04
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cfo
9
3L的回答应该算是很确切的咯。
2010-11-13 12:33
0
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
刚好可以看懂
2010-11-13 13:22
0
雪    币: 81
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
基本上来说,原理简单,对编译器来说却是灾难。试想假设设置多个在栈中局部变量,由于不知道确切的大小,各个局部变量指令地址动态给出,如何编译?直到运行时都有可能不知道确切的大小,编译器如何设计?除非全部放进堆中,c语言短小精焊,很难做到这一点,效率也很低,只能说c编译器设计者是高瞻远瞩的。
2010-11-13 13:28
0
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2010-11-20 16:55
0
游客
登录 | 注册 方可回帖
返回
//