每次都会在同一个问题上纠结半天,搞懂了又忘,这样不好不好╮(╯﹏╰)╭···
终于想到花点时间把问题记记了,持续更新ing~~~~
1.const char p 与char const p 与char const p
const char p 与char const p一样,意思是字符指针p指向的是字符常量,即不能 p='a'; 这样赋值
char const p意思是指针p是常指针,即指针的地址不能发生改变,不能p=q; 这样改变指针的指向
2.p++、(p)++、(p++)、++p、++(p)、*(++p) ::>_<::
还是用个简单的例子吧
#includevoid main() { int a[]={1,2,3,4,5}; int *p=a; printf("%d,",*p); printf("%d,",(*p)++); printf("%d,",*p); printf("na[0]=%d",a[0]); printf("n%d",(*p)--); //还原a[0]的值 printf("n%d",*p++); //结果为1 printf("n%d",*p); //结果为2 printf("n%d",a[0]); //结果为1,显然与*p++效果不相同,因为'*'和'++'优先级相同,从右到左结合,所以*p++相当于*(p++),所以指针现在指向a[1] printf("n%d",*(--p)); //还原指针的位置,但此时先进行自减操作再输出值,同理*(++p),++(*p)亦如此 printf("n%d,",*(++p)); printf("%d,",*(p++)); printf("%d",*p); }
做个小练习:
p=a; printf("%dn",*(++p)); printf("%dn",*(p)++); printf("%dn",*p--); printf("%dn",--(*p)); printf("%dn",*p);
输出的结果分别是多少呢?
3.string,char string,string[]
①
char *string="I love Imooc!";
printf("%s",string);
string="I love Imooc too!";
printf("n%s",string); //正确
//更正//
char str[10], *p;
p=str;
scanf("%s",p);
char string[]="I love Imooc!";
printf("%s",string); //正确
//问题关键在于:数组名表示地址,但数组名是常量,不能像指针一样进行加减偏移操作,也即不能企图通过数组名给数组赋值字符串
② 输入代码
<不断加入新问题·······>



