请教一个C语言的问题
代码 如下
char *string = "iphone5";
int *p = (int *)string;
p+=1;
printf("输出:%s",p);
上面最后输出的结果是ne5(没有加p+=1;输出的是iphone5)。
请问该如何理解呢,int *p = (int *)string;是指针强制转换,转换后影响的是运算的什么呢?
求详细指教,不是很明了,模模糊糊- - 。。。
3Q
[解决办法]
int *p = (int *)string; p+=1; //*p为四个字节,加一后是后移了4个字节,指向n,就输出ne1
[解决办法]
本人的理解:
首先string指向的是一个地址。指针强制转换后,p也指向string所指向的指针。string是char型的,而char型只占一个字节;p是int型的,占4个字节。执行p+=1后,p所指向的地址就加4了,也就指向了从“n”开始的字符了,所以printf("输出:%s",p);输出从“n”开始,到“\0”结束的字符,也就是“ne5”了。
[解决办法]
对指针
Type *p;
作整数加法运算p+n实质上返回
(p指向的地址)+n*sizeof(Type)