当前位置:首页 » 《随便一记》 » 正文

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

27 人参与  2023年03月30日 19:29  分类 : 《随便一记》  评论

点击全文阅读


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

第一种为

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

第二种为

char *str = "hello";

两种的区别如下:

char str[] 将字符串定义为字符串变量 (可读可写)而 char *str 将字符串定义为字符串常量 (只读)
#include <stdlib.h>int main() {char str1[] = "hello";char m[] = "hello";char *str2 = "hello";char *n = "hello";//str1[0] = 'p';//str2[0] = 'l';//printf("%s",str1); // 成功 //printf("%s",str2); // 错误 写入访问权限冲突printf("str1 = %p\n",str1);printf("m = %p\n",m);printf("str2 = %p\n",str2);printf("n = %p\n",n);return 0;}

程序运行结果如下:

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

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

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

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

#include <stdlib.h>int main() {    char str[] = "ni chou sha";    char *p = str; // 定义一个指针变量 用于指针操作    while(*p) {        // 遍历字符串 打印每个字符地址        printf("%p\n",str);        p++;    }    return 0;}

或者

#include <stdlib.h>int main() {    char *str = "ni chou sha";        while(*str) {        // 遍历字符串 打印每个字符地址        printf("%p\n",str);        str++;    }    return 0;}

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

 


点击全文阅读


本文链接:http://zhangshiyu.com/post/57476.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1