不想用链表的可以看下,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]
如果要交换的话,就指针互相交换
如果要插入的话,那么就依次将指针指向后一个(其实这样还是没有链表灵活)
如果要删除,那么就让指针都前移。。。。
声明,本博客只是写了这样一种用法,虽然说没有链表灵活,但是也算是一种摸索吧,高手勿喷。我觉得吧,探索
浙公网安备 33010602011771号