每次都会在同一个问题上纠结半天,搞懂了又忘,这样不好不好╮(╯﹏╰)╭···
终于想到花点时间把问题记记了,持续更新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) ::>_<::
还是用个简单的例子吧
#include <stdio.h>
void main()
{
int a[]={1,2,3,4,5};
int *p=a;
printf("%d,",*p);
printf("%d,",(*p)++);
printf("%d,",*p);
/*运行前三个,结果分别是1,1,2, 再输出a[0]看下*/
printf("\na[0]=%d",a[0]);
/*结果是2,很显然printf("%d,",(*p)++);的作用就出来了,输出指针所指元素的值后对指针所指向的元素进行自增操作*/
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);
/*结果分别为2,2,3 这里就是对指针进行偏移了,原理和上面类似*/
}
做个小练习:
p=a; printf("%d\n",*(++p)); printf("%d\n",*(p)++); printf("%d\n",*p--); printf("%d\n",--(*p)); printf("%d\n",*p);
输出的结果分别是多少呢?
3.string,char string,string[]
①
char *string="I love Imooc!";
printf("%s",string);
string="I love Imooc too!";
printf("\n%s",string); //正确
/*scanf("%s",string);
printf("%s",string); 错误!!!*/
//更正//
char str[10], *p;
p=str;
scanf("%s",p);
char string[]="I love Imooc!";
printf("%s",string); //正确
/*scanf("%s",string);
printf("%s",string);
string="Do you love Imooc?";
printf("%s",string); 错误!!!*/
//问题关键在于:数组名表示地址,但数组名是常量,不能像指针一样进行加减偏移操作,也即不能企图通过数组名给数组赋值字符串
② 输入代码
<不断加入新问题·······>
点击查看更多内容
9人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦