为了账号安全,请及时绑定邮箱和手机立即绑定

记C那些烦人又易混淆的东西~

标签:
C

每次都会在同一个问题上纠结半天,搞懂了又忘,这样不好不好╮(╯﹏╰)╭···
终于想到花点时间把问题记记了,持续更新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人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消