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

这篇具有很好参考价值的文章主要介绍了C语言字符串的两种定义方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

第一种为

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

第二种为

char *str = "hello";

两种的区别如下:

  1. 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;
    }

    程序运行结果如下:C语言字符串的两种定义方式

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

  2. 虽然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;
    }

    程序运行成功! 结果如下:C语言字符串的两种定义方式

     文章来源地址https://www.toymoban.com/news/detail-400872.html

到了这里,关于C语言字符串的两种定义方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中的字符串操作函数自定义实现:标准版与限定长度版

            目录 1. 标准字符串操作函数自定义实现 (a) 自定义strcpy函数 (b) 自定义strcat函数 (c) 自定义strcmp函数 2. 限定长度字符串操作函数自定义实现 (a) 自定义strncpy函数 (b) 自定义strncat函数 (c) 自定义strncmp函数  对字符串的操作是不可或缺的一部分。标准库提供了如strcpy、

    2024年01月21日
    浏览(56)
  • Python_字符串(字符串拼接:join() 与 +拼接符两种方法效率对比)

    运算结果如下图所示: 显然,在循环1000000次的前提下,字符的join()运算效率远远高于使用+拼接符的运算。 其根本逻辑在于: 对于简单的+运算符,字符串每次相加都会创建一个新的对象。较为费时。 而对于join(),其用于列表内字符串的相加,列表中字符串的相加并不会创建

    2023年04月24日
    浏览(54)
  • JS两种方法判断字符串是否包含中文

    第一种是正则表达式来判断,判断输入的字符中是否包含中文。 第二种是通过charCodeAt()来判断,字符串.charCodeAt(index)255 就是中文,否则是英文。

    2024年02月13日
    浏览(65)
  • js 判断两个字符串是否相等(有两种方法)

    使用比较运算符判断两个字符串是否相等 可以使用比较运算符 === 或 == 来判断两个字符串是否相等。例如: 在上述代码中,我们定义了两个字符串变量 str1 和 str2 ,并使用 === 运算符来比较它们的值。如果两个字符串相等,则输出 两个字符串相等 ;否则输出 两个字符串不相

    2024年02月05日
    浏览(73)
  • Android——自定义Dialog的两种常见方式

    通常我们只需要关注三个回调方法: onCreateDialog:创建一个dialog外壳 onCreateView:给dialog外壳填充自己想要的样式布局 onViewCreated:这里面给布局的view进行初始化操作,可以设置一些监听器等等 事例: 自定义布局文件:随便写一个

    2024年02月16日
    浏览(39)
  • mysql 拼接字符串,截取字符串 常用方式

    1,拼接字符串常用:CONCAT(‘需要拼接的字符串’,列名) CONCAT(\\\'+\\\',b.Telephone)查询出号码,前边加上+号 2,分割字符串 substring_index(b.Telephone,\\\'+\\\',1) 用从左往右的第一个+分割电话号码,获取分割后的从左往右的第一个字符串 比如 86+133333333 执行完后 为 86 substring_index(b.Telephone,\\\'+\\\',

    2024年02月14日
    浏览(49)
  • 两种不同的方法来检查Python中的变量是否是字符串

    在Python中,每个变量都有一个数据类型。数据类型表示一个变量内部存储的是哪种数据。 数据类型是编程语言最重要的特征,它区分了我们可以存储的不同类型的数据,如字符串、int和float。 在处理许多编程问题时,可能会遇到这样的情况:我们需要找到某个变量的数据类型

    2024年02月11日
    浏览(54)
  • Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式

    1、String.format 最原始最基础的方式。 使用%来表示占位,后面跟上不同的标识符,用于限定这个占位符的参数类型,由jdk原生提供支持。 示例: 2、MessageFormat 如果遇到一个参数需要替换模板中多个占位的场景,更友好的方式是MessageFormat,由jdk原生提供支持。 示例: 举例:将

    2024年02月16日
    浏览(57)
  • 字符串的遍历方式

    ​常见的数据结构和数据类型,如字符串,树,哈希表,栈,队列等,我们经常在做题的时候会遇到遍历他们的情况,所以掌握好这些方法才能在遇到题目的时候打开思路解决问题,掌握好招式才能正式的解决问题,才能有独立完成问题的可能性。 ​那么我们这篇文章先学习

    2023年04月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包