玩了快一个月了,回来继续更了。
用指针拆解整形数为字符型
int i1=13,i2=91;
char s[8];
char *ptr=(char *)&i1;
s[0]=*ptr;
s[1]=*(ptr+1);
s[2]=*(ptr+2);
s[3]=*(ptr+3);
ptr=(char *)&i2;
s[4]=*(ptr+4);
s[5]=*(ptr+5);
s[6]=*(ptr+6);
s[7]=*(ptr+7);
int *b;
b=s;
printf("%d,%d\n",b[0],b[1]);
错误,应该修改为
ptr=(char *)&i2;
s[4]=*(ptr);
s[5]=*(ptr+1);
s[6]=*(ptr+2);
s[7]=*(ptr+3);
即可正确拆解。
char *str="wesda"; str="rfdcx"; 都是合法的。但是,char a[10]="sdad";之后再a="dfad"是错的,虽然a就是数组的首地址。而char *str="wesda";*str='d'是不可以的,虽然它和前面的一样都是在只读段,但str="sdawq"是换了个字符串绑定,并没有写入,而*str='s'是真正试图写入了。
链表:
#include <stdio.h>
typedef struct NODE{
struct NODE *link;
int value;
}Node;
Node *n1;
Node *n2=(Node *)malloc(sizeof(Node));
n1->link=n2;
n2->link=NULL;
printf("%d,%d,%d,%d,%d",n1,&n1->link,&n1->value,n2,n1->link);
从内存存储上来说,他的存储是这样的
link是指针,存储是void *型,占1个字节,接着value占一个字节,地址n1就是结构体n1的首地址就是&n1->link,因为link是结构体n1的第一个成员,而n1->link的最后落脚点是link,是一个地址,此地址可以手动设置为n2的首地址,那样两个结构体就联系在一起了。value就是此节点的数值域,link就是此节点的指针域。这样链表就可以很方便的存储分散的数据,也可以方便的增减数据。但是如果是相邻的数据的处理,他的效率是远不如数组的。
例程解析
12.2考虑了插入值小于首值的情况,处理方法是更改根节点为new,之后的链表因为未修改,所以他们的指向不变,因为如果传入函数的是*root,则root是形参,无法修改,所以需要传入**root