for (p = s + 1; p < s + 4; p++)
p的初值是s+1,s是数组首元素地址,加一就是第二个元素地址,于是指针 p 指向数组第二个元素,就是B。
BCD CD D
指针运算需要注意它的步长。
int main()
{
int num, *p = #
char ch, *q = &ch;
printf("p的值 %p
", p);
printf("p+1的值 %p
", p + 1);
printf("q的值 %p
", q);
printf("q+1的值 %p
", q + 1);
return 0;
}
比如,同样是指针,int *和char *,它俩加一的结果就不一样,一个加四个字节,一个加一个字节。
root@Turbo:~# ./test
p的值 0x7ffc8116daf4
p+1的值 0x7ffc8116daf8
q的值 0x7ffc8116daf3
q+1的值 0x7ffc8116daf4
root@Turbo:~#
如果把它理解成指向下一个元素,我觉得可能更容易接受一些。所以在写代码的时候,不同类型的指针不要随便赋值,除非你知道你在干什么,否则,就会出现一些不可预知的错误。比如下面的代码:
int main()
{
int num[] = {1, 2, 3, 4, 5};
char *p = (char *)num;
p++;
printf("%d
", *(int *)p);
return 0;
}
num是个整型数组,每个元素占4个字节。
但是指针p是字符型指针,对p做自增操作,每次只能移动一个字节。很显然,已经不是一个完整的整数。所以这样的赋值,尽可能避免。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !