最近在看《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。(很绕的规则,我还没想清楚)