不想用链表的可以看下,c语言

废话先不说,看代码

int main(int argc, char* argv[])
{
 int a[8]={0,1,2,3,4,5,6,7};
 int *(*p);
 p=(int**)malloc(20);
 p[0]=&a[1];
 p[1]=&a[0];
 printf("%d %d\n",a[0],a[1]);
 printf("%d %d\n",*(p[0]),*(p[1]));
 p[0]=&a[3];
 printf("%d %d\n",*(p[0]),*(p[1]));
 printf("%d %d\n",a[0],a[1]);
 printf("%x\n",&p[0]);
 printf("%x\n",p[0]);
 printf("%x\n",&p[1]);


 return 0;
}

该程序几点简单的说明,有鉴于小弟经常在内存操作上面碰壁,对链表的操作也很讨厌,最主要的还是链表太多了之后,很耗的原因,一直在思考,为什么数组在人们的想法中就如此不堪,数组操作简单,就是在交换元素,插入记录的时候比较繁琐,而且数组必须交代出元素个数,看起来是真的很繁琐,局限性大,

(1)、直到一天,看到了这样一种用法

char a[]="jintianniyaojiageiwo";

char *b;           b=&a[0];

然后,就有了b[0]='j';b[1]='i'..........恶搞吧。但是确实可以编译通过,而且真的就能用。笑了,正好可以适应于不定大小的数组。

(2)、看代码:

typedef rectage

{int a;int b;int c;.....int m;}rect;

rect *p;

p=(rect*)malloc(1000);

//将数组赋值进去,这里可以是用户输入的,可以是读写数据库的,很灵活,就不影响各位了

笑了,这样虽然说实现了不定大小数组的读写问题,,,但是如果我要插入呢,如果我要删除呢,,按位移动还是怎么搞仿佛都很伤啊

(3)、这个时候想起了指针,当然不是放在结构体里面了,那样没意义,和链表就那么回事了。但是我们可以用到这种思路

看代码

呈上:rect *a;

a=(rect*)malloc(2000);

rect *(*m);            //一堆指针,让其分别指向a[]的元素,这样如果要交换的时候,只用让指针改变就行了,插入的话,

m=(rect**)malloc(250);                        //就在a[]和m[]末尾都加一个记录,指向关系

//给a赋值的语句略

m[0]=&a[0];

...

m[n]=&a[n];

(4)、这样的话,如果添加记录,就先给a[n+1]赋值,然后m[n+1]=&a[n+1]

如果要交换的话,就指针互相交换

如果要插入的话,那么就依次将指针指向后一个(其实这样还是没有链表灵活)

如果要删除,那么就让指针都前移。。。。

 

声明,本博客只是写了这样一种用法,虽然说没有链表灵活,但是也算是一种摸索吧,高手勿喷。我觉得吧,探索

posted on 2012-05-29 19:05  轻歌曼舞  阅读(198)  评论(0编辑  收藏  举报