• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C语言字符串的两种定义方式

武飞扬头像
Alauda7
帮助2

C语言中 初始化一个字符串有两种定义方式:

第一种为

char str[] = "hello"; 或者 char str[] = {'h','e','l','l','o','\0'};

第二种为

char *str = "hello";

两种的区别如下:

  1. char str[] 将字符串定义为字符串变量 (可读可写)而 char *str 将字符串定义为字符串常量 (只读)
    1.  
      #include <stdlib.h>
    2.  
       
    3.  
      int main() {
    4.  
       
    5.  
      char str1[] = "hello";
    6.  
      char m[] = "hello";
    7.  
       
    8.  
      char *str2 = "hello";
    9.  
      char *n = "hello";
    10.  
       
    11.  
      //str1[0] = 'p';
    12.  
      //str2[0] = 'l';
    13.  
      //printf("%s",str1); // 成功
    14.  
      //printf("%s",str2); // 错误 写入访问权限冲突
    15.  
       
    16.  
      printf("str1 = %p\n",str1);
    17.  
      printf("m = %p\n",m);
    18.  
       
    19.  
      printf("str2 = %p\n",str2);
    20.  
      printf("n = %p\n",n);
    21.  
       
    22.  
      return 0;
    23.  
      }
    学新通

    程序运行结果如下:学新通

     可以看出字符串str1 与 m地址不同 ,说明它们在内存中开辟了两块区域 是一种变量。而字符串str2与n地址相同,说明它们指向同一块区域 是字符串常量

  2. 虽然char str1[] 定义str1为字符串变量,但是它的数组名代表指针常量不可以修改

    1.  
      #include <stdlib.h>
    2.  
       
    3.  
      int main() {
    4.  
       
    5.  
      char str[] = "ni chou sha";
    6.  
      while(*str) {
    7.  
      // 遍历字符串 打印每个字符地址
    8.  
      printf("%p\n",str);
    9.  
      str ; // 报错 表达式必须是可修改的左值
    10.  
      }
    11.  
       
    12.  
      return 0;
    13.  
      }

    上述程序有误 字符串名str实质为指针指向字符串首地址,但是是一种指针常量 不能被修改!可以将程序改为

    1.  
      #include <stdlib.h>
    2.  
       
    3.  
      int main() {
    4.  
       
    5.  
      char str[] = "ni chou sha";
    6.  
      char *p = str; // 定义一个指针变量 用于指针操作
    7.  
      while(*p) {
    8.  
      // 遍历字符串 打印每个字符地址
    9.  
      printf("%p\n",str);
    10.  
      p ;
    11.  
      }
    12.  
       
    13.  
      return 0;
    14.  
      }

    或者

    1.  
      #include <stdlib.h>
    2.  
       
    3.  
      int main() {
    4.  
       
    5.  
      char *str = "ni chou sha";
    6.  
       
    7.  
      while(*str) {
    8.  
      // 遍历字符串 打印每个字符地址
    9.  
      printf("%p\n",str);
    10.  
      str ;
    11.  
      }
    12.  
       
    13.  
      return 0;
    14.  
      }

    程序运行成功! 结果如下:学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfcbhch
系列文章
更多 icon
同类精品
更多 icon
继续加载