c语言的一些高级用法

最近在看《c和指针》,每天会更新一些,如有错误望指正。

int *p;因为int型是4个字节,那么p+1不是一字节之后,而是一个int型之后,也就是4字节之后。任何类型加一都是一个类型长度之后,而不是一字节之后。同理int a[4];int *p1=&a[0],*p2=&a[1];那么p2-p1就是1,虽然p2可能是1004,p1就是1000,但是这个相减过程,会在最后再自动除以此类型的长度4,不过前提是两个指针都必须指向同一数组.
for(vp=&values[N-1];vp>=&values[0];vp--)  {*vp=0;} 这个程序有个问题,就是最后会出现values[0]之前的地址与其进行比较,标准允许与数组最后的位置之后一位的地址比较,但是不运行和第一位之前的地址比较,虽然大部分编译器都能运行。
char str[5] = "12345";虽然也合法,但会丢失末尾的'\0';str[4]会报错;str[6]就能包括‘\0’。 
char str1[]="asdfg";对初始化为常量的指针,可以*(str1+1)='p',可以*(str1+i)=='a'进行比较,但是不能str1++;也不能*str1=*(str1+1),只能将其先复制到新的指针里,char *str2=str1+1;char *copy=str1;然后遍历使*copy=*str2;  copy++;    str2++;*copy='\0'.因为两者不是初始化为常量,所以可以对地址赋值,注意在末尾加入终止符,但是最后是无法打印copy的,它只是对str1的复制,只能打印str1。(很绕的规则,我还没想清楚)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值