c语言的一些高级用法12

玩了快一个月了,回来继续更了。

用指针拆解整形数为字符型

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值