• 字符指针的进阶


    对于指针,到此处的读者对于都有着不少的独自认识与了解!因此,笔者也不敢托大!作为一个浅浅的小白,写篇指针的进阶,来祈祷大佬的指教!

    首先,笔者先对指针进行初步回顾一下!

    1.指针就是变量,用来存放地址,地址唯一标识的一块内存空间!

    2.指针的大小是固定的4/8个字节(32位平台/64位平台)!

    3.指针是有类型,指针的类型决定了指针走一步(+,-)整数的步长!指针解引用操作的时候的权限!

    4.指针的运算!

    下面步入正题:

    1.字符指针:char * 类型

    1. char ch = 'W';
    2. char* pc = &ch;

    这段是我们所熟悉的!但是对于再字符串指针中:

    1. #include
    2. int main()
    3. {
    4. char* ps = "abcdef";
    5. printf("%c\n", *ps);
    6. return 0;
    7. }

    而最后的打印结果为:a

    对于打印结果,不少人有着疑惑,但结果确实是这样的!

    在这里面  char* ps = "abcdef",仅仅是将 字符串的首地址(a的地址)传递给了指针ps;

    并不是将abcdef存放到ps里面,而是存放的a的地址!因此再printf("");语句里面,对其解引用,得到的结果为a ;

    2.在上述代码中:    char* ps = "abcdef";  为字符串常量,

    下面笔者对上述代码段进行简单更改!

    1. #include
    2. int main()
    3. {
    4. char* ps = "abcdef";
    5. ps = 'w';
    6. printf("%c\n", *ps);
    7. return 0;
    8. }

    然而最后的打印结果为:什么都不打印!!!

     

    是滴!我没有说错,你也没有看错!最后的打印结果确实为:什么都没有!!!

    主要原因为:字符串常量不可修改!

    1. #include
    2. int main()
    3. {
    4. char* ps = "abcdef";
    5. printf("%s\n", ps);
    6. return 0;
    7. }

     对于上述代码,与第一个代码不同的是在于printf(""); 语句里面的%s; %s:打印字符串,而打印字符串只需要知道起始位置就可以,而ps里面放的是‘a'的地址!则可以顺序打印出来abcdef;

    因此最后的打印结果为: abcdef

    3.字符串的比较

    1. #include <stdio.h>
    2. int main()
    3. {
    4. char ch1[] = "hello jiyuan";
    5. char ch2[] = "hello jiyuan";
    6. const char* ch3[] = "hello jiyuan";
    7. const char* ch4[] = "hello jiyuan";
    8. if (ch1 == ch2)
    9. {
    10. printf("相同\n");
    11. }
    12. else
    13. {
    14. printf("不相同\n");
    15. }
    16. if (ch3 == ch4)
    17. {
    18. printf("相同\n");
    19. }
    20. else
    21. {
    22. printf("不相同\n");
    23. }
    24. return 0;
    25. }

    在上述代码中,笔者首先定义了两个数组: ch1[], ch2[]; 在这两个数组里面,输入的字符串是一样的,但是再内存中,开辟了两个地址来存放这两个字符串,因此地址是不一样的!

    然后笔者定义了两个:const char* 类型的字符串: ch3[], ch4[];里面存放着相同的字符串,常量字符串不能修改!则,存放ch3[] 与存放ch4[] 元素的地址相同!

    然而,在下方if语句里面,咋一看吓到了不少人,但是,数组名是数组首元素的地址!所以,在if语句里面比较的是:地址!

    所以最后的结果显而易见!

    如果读者想比较字符串的内容,则可以使用库函数:strcmp();

    即:ch1[] 与 ch2[] 一样 ;  ch3[] 与 ch4[] 一样!在此笔者就不做过多的讲述!

  • 相关阅读:
    Gitlab配置pre-receive钩子拦截检查提交日志是否满足规范
    算法 旋转矩阵
    【记录】非常实用,Python编码规范的一些建议(2)
    网络安全——钓鱼邮件和网站克隆
    7.Eureka注册中心
    Linux内核的配置和编译(2)——Linux内核下载与配置
    img2col 卷积优化讲解
    QT用户登录注册,数据库实现
    Webpack
    Lambda 架构 vs Kappa 架构
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/126559106