C语言中动态数组的作用,C语言定义动态数组问题

另外,Redis中的sds就是一个经典的动态数组

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 09:12

你这种写法我倒是理解了,但是感觉存在一些问题,

1,我们还是需要给结构体中的capacity赋一个初值,这个值又应该赋值为多少了?size初始值倒没问题,应该赋值为0;

2,循环终止的条件又是什么了?

3,在你判断size和capacity是否相等中,如果相等就将ptr的内存扩大为原来的两倍,这样虽然解决了数组存不足的问题,但是我觉得会比较浪费内存。有没有其他的,更简便的方法来解决这个问题了。

陈太浪

|

园豆:138

(初学一级)

|

2020-03-10 09:33

@陈太浪:

capacity 赋任意值都行,一般是64,遍历的时候是根据size来的

从scanf不能再读取数据了

这个内存空间不会占用太多,很多源码都是这种扩充方式,而且这种方式是简洁、高效的,还有一些复杂的扩充方式,但是对于你的需求来说没必要用,这已经是C语言实现动态数组最简便的方式了

如有帮助,请采纳~~~

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 09:52

你好,我还想继续请教一下,如何通过while(循环读取数据number),也就是说如何读取用户输入的数据,怎么判断用户输入数据的过程有没有结束。麻烦将过程说得详细一点,谢谢!0.0

陈太浪

|

园豆:138

(初学一级)

|

2020-03-10 19:45

@陈太浪:

scanf是有返回值的,用户不输入数据后,scanf就会返回0

while(scanf("%d", &number) == 1){

do something

}

可参考:https://blog.csdn.net/qq_15037231/article/details/51868739

如有帮助,请采纳~~~

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 19:51

@wengle: 谢谢 我去试试

陈太浪

|

园豆:138

(初学一级)

|

2020-03-10 20:08

@陈太浪: 能够帮到你,我很高兴,如果解决了你的问题,请采纳~~~ 这是对我最大的鼓励,谢谢

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 20:09

麻烦再帮我看一下我写的代码哪里出现了问题,运行之后没有结果输出

代码的作用就是通过你所给的方法定义一个动态的数组,然后往里面存值,最后再将存储的内容

打印出来,但是却没有任何输出.

#include

#include

struct dynamicArray

{

int size;

int capicity;

int *ptr;

};

int main()

{

typedef struct dynamicArray dnArray;

dnArray arr;

//size初始化为0

arr.size = 0;

//capicity初始化为4

arr.capicity = 4;

//给结构体的指针动态分配内存

arr.ptr = (int *) malloc(arr.capicity* sizeof(int));

//需要存储的数据

int num;

while (scanf("%d",&num) == 1)

{

arr.ptr[arr.size] = num;

arr.size++;

if(arr.capicity ==arr.size)

{

arr.ptr = (int *) realloc(arr.ptr, 2*arr.capicity*sizeof(int));

arr.capicity = arr.capicity*2;

}

}

//打印存储后的结果

for (int i = 0; i < arr.size; i++)

{

printf("%d\n",arr.ptr[i]);

}

return 0;

}

陈太浪

|

园豆:138

(初学一级)

|

2020-03-10 20:38

@陈太浪: 代码写的没问题,你输完之后,记得按一下ctrl+D,这个表示输入结束

或者这样先把数据保存到文件里,然后重定向到程序的标准输入

0520c48cf6f84a7300dfac82cdf4d2bb.png

./hello < data.out

d95e581f166709fa25ce8cdf7520f057.png

不错啊~有潜力

能够帮到你,我很高兴,如果解决了你的问题,请采纳~~~ 这是对我最大的鼓励,谢谢

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 21:05

@wengle: 终于搞好了,真的非常感谢你,麻烦你一天了。

陈太浪

|

园豆:138

(初学一级)

|

2020-03-10 21:08

@陈太浪: 能帮到你就行,一起加油~~~

wengle

|

园豆:567

(小虾三级)

|

2020-03-10 21:10

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值