鱼C论坛

 找回密码
 立即注册
查看: 3234|回复: 3

[技术交流] 关于C语言的动态数组

[复制链接]
发表于 2011-4-28 23:03:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
个人的一点看法,大家仅供参考。希望对大家有所帮助。

有人说C语言使用数组的时候,是要定义好大小的,不能是未知的空间,但,往往开一个足够大的空间会造成浪费吧。

而作为一个数组  eg  int temp[10];

大家也应该都知道,数组的名字,就是这个数组的首地址,而这个数组的十个元素,也就是对应首地址连续的10个内存空间。

所以,基于以上几点,那么我可以进行如下操作。

输入一个我想开辟的大小 N

然后用malloc函数 开辟相应空间   (int *)malloc(sizeof(int)*N);  

这样就返回了一个整形的指针地址,也是一个连续的空间,同样也是一个数组。

对于上面的数据类型,可以相应的变通。至于字符型的就有现成的了。

可能有人会说,输入一个开辟空间的大小,不还是规定了数组的大小了嘛。

但,对于一次输入来说是这样的,是一个固定的空间,但如果进行多次输入的,每次输入的不一样的时候呢,是不是会比定义一个足够大的空间,来的要方便。

以上是我的个人的理解。感觉这个理解好了,主要是对 地址 和 指针 的概念更清晰了。大家有什么好的见解,一起分享。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-29 03:06:55 | 显示全部楼层
嘿嘿 看起来不错 你实现过吗?  呃 能不能给段例程?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-29 08:40:48 | 显示全部楼层
当然实现了  我在Binary Search   (半折查找)使用的就是这种形式。

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

int *init_array(int n)
{
        return (int *)malloc(sizeof(int) * n);
}

void binary_search(int *local,int find,int length)
{
        int low, high, mid;
        low = 0;
        high = length;

        while(low <= high)
        {
                mid = (low + high) / 2;
                if( local[mid] == find)
                {
                        printf("The element you find locaed at %dth\n", (mid + 1));
                        exit(0);
                }
                if( local[mid] < find)
                {
                        low = mid + 1;
                }
                if( local[mid] > find)
                {
                        high = mid -1;
                }
        }
        printf("No Such Elemment Finded!!\n");
}

int main()
{
        int find,len, *local, *temp, length;
        printf("Put The length of integer:");
        scanf("%d",&len);
        length = len;
        temp = local = init_array(len);
        printf("The elemments of thie array:");
        while( len-- )
        {
                scanf("%d",temp++);
        }
        printf("The Elemment You Want Find:");
        scanf("%d",&find);
        binary_search(local, find, length);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-2 11:25:15 | 显示全部楼层
看看老帖,支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 13:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表