为什么是h而不是e呢
因为先取的地址,然后才src+1
要看到你说的效果,需要把src++写在printf的上一行。
你好,如果你要得到e的话,应该打印*src++ ,取当前值,然后再移动地址;(*p)++,取当前值然后再使当前值的数值增一。
而你目前的问题为何是h呢?原因在其你直接用printf函数将其打印,只取了当前值,若要得到e,你可以newline,重新打印*src;
另外一种方法,你可以在printf函数之前先进行,再打印*src++的值。你自己你想测试找出该问题你可以通过打印其地址用%#p,
#include <stdio.h>
int main (void)
{
char* src = "hello";
*src++;
printf ("%c,%#p\n", *src,*src);
// printf ("%c,%#p\n", *src, *src);
// printf ("%c,%#p\n", *src++, *rc);
// printf ("%c,%#p\n", (*src++), *src);
getchar();
return 0;
}
*有两个意思,理论上,作为 乘法 运算符,级别低于 ++(自增)。
作为 指针取值 运算符,级别同 ++(自增)一样。
*p++; 很令人混淆。它不是 *p = *p + 1; 它却是 *p = *(p+1);
int a[]={1,12,23};
int *p=a;
printf("%d\n",*p++); 输出 a[0]的值 1,后加加:表达式里先用原值,不自增。
出了上面打印语句再自增 *p = *(p+1);
接着打印 printf("%d\n",*p); 打出 a[1]的值 12。
在你这里:
printf("%c",*a++); //为h
printf("%c",*a); //为e
运算符优先级的问题, * > ++ 运算符, *p++ 编译器认为是 (*p)++