`

C中字符串的几种定义方法及说明

 
阅读更多

在C中定义字符串有下列几种形式:字符串常量,char数组,char指针

1.字符串常量

   即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为

一个字符串存储在内存中。如:printf("%s","hello"); //"hello"

    如果字符串文字中间没有间隔或间隔的是空格符,ANSI  C 会将其串联起来。例:

     char greeting[50] = "hello,and" "how are" "you";

   等价于:

     char greeting[50] = "hello,and how are you";

  字符串常量属于静态存储类。静态存储是指如果在一个函数中使用字符串常量,即使是多次调用了这个函数,

该字符串在程序的整个运行过程中只存储一份。整个引号的内容作为指向该字符串存储位置的指针。这一点与

把数组名作为指向数组存储位置的指针类似。

2.字符串数组及其初始化

   初始化例子:

      char m[40] = "hello,world";  //定义字符串数组时必须指定数组大小(整型常量),在指定大小时,要确保数组的大小比预定的大一个,因为编译器会自动添加'\0'。

                                             //多余的元素会初始化为'\0'


      char m={'h','e','l','\0'};  //注意标志结束的空字符,若没有它,得到的只是一个字符数组而不是字符串

3.利用char指针定义字符串

       char *m = "hello,world"; //自动添加'\0'

      注意:此时字符串指针m指向字符串常量,不成用*(m+1)='o'修改此常量,因为这个字符串常量放在常量区不能被修改

4.数组和指针

   数组形式和指针形式有什么不同呢?

       数组形式: char m[40] = "hello,world"; 

       指针形式: char *m = "hello,world";

   数组形式:


  •      编译器会把数组名m看作是数组首元素的地址&m[0]的同义词,m是个地址常量。可以用m+1来标识数组里的下一个元素,但不能使用++m,增量运算符只能在变量前使用, 而不能在常量前使用。
  •      m[40]在计算机内存中被分配一个有40个元素的数组(其中每个元素对应一个字符,还有一个附加的元素对应结束的空字符'\0')。每个元素都被初始化为相应的字符。  
             通常,被引用的字符串存储在可执行文件的数据段部分;当程序被加载到内存中时,字符串也被加载到内存中,把被引用的字符串复制到数组中
    指针形式:
  •      指针形式(*m)也会在静态存储区为字符串预留空间。此外,一旦程序开始执行,还要为指针变量m另外预留一个存储位置,以在该指针变量中能够存储字符串的地址。
  •       m指向字符串的第一个字符,可用++m指向第二个字符。  指针m是个变量。    



























 

0
0
分享到:
评论

相关推荐

    c语言数据结构字符串模式匹配算法.zip

    KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: ...

    C语言程序设计标准教程

    三种方法中说明的boy1,boy2变量都具有图7.1所示的结构。说明了boy1,boy2变量为stu类型后,即可向这两个变量中的各个成员赋值。在上述stu结构定义中,所有的成员都是基本数据类型或数组类型。成员也可以又是一个结构...

    第三章JAVA 中的数组及字符串.doc

     二维数组的另几种定义方法: 1:int two[][]={{1,2,3,4},{0,0,0,0},{3,4,5,6}}三行四列的二维数组(与C相同) 2:int two[][]=new int[4][]; two[0]=new int[5]; two[1]=new int[5]; two[2]=new int[5]; two[3...

    谭浩强c语言程序设计

    6.7 几种循环的比较 79 6.8 break和continue语句 79 6.8.1 break语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 83 ...

    谭浩强版c语言程序设计

    6.7 几种循环的比较 79 6.8 break和continue语句 79 6.8.1 break语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 83 ...

    谭浩强 C语言程序设计 教程全书 Word版

    6.7 几种循环的比较 9 6.8 break和continue语句 9 6.8.1 break语句 9 6.8.2 continue 语句 10 6.9 程序举例 11 7 数组 1 7.1 一维数组的定义和引用 1 7.1.1 一维数组的定义方式 1 7.1.2 一维数组元素的引用 2 7.1.3 ...

    C语言入门经典(第4版)--源代码及课后练习答案

    6.2 处理字符串和文本的方法 203 6.3 字符串操作 206 6.3.1 连接字符串 206 6.3.2 字符串数组 208 6.4 字符串库函数 210 6.4.1 使用库函数复制字符串 210 6.4.2 使用库函数确定字符串的长度 211 6.4.3 使用...

    《C语言程序设计》谭浩强

    6.7 几种循环的比较 79 6.8 break和continue语句 79 6.8.1 break语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 83 ...

    C语言标准教程第一章 C语言概论

     C 语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。在第二章中将专门给予介绍。 6.注释符  C 语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为...

    VBSCRIPT中文手册

    学习几个语句,研究几种方法,或者熟悉几个函数。你就能学会如何巧妙地运用 VBScript 语言,充分发挥 VBScript 语言的强大功能。 特性 说明 VBScript 特性 VBScript 最新特性列表 未包含在 VBScript 中的 VBA ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    7.1.2 结构体类型变量的定义方法及其初始化 7.1.3 结构体变量的引用 7.1.4 结构体数组 7.1.5 指向结构体变量的指针 7.1.6 结构体类型数据作为函数参数 *7.1.7 动态分配和撤销内存的运算符new和delete 7.2 共用体 ...

    谭浩强 入门c语言教程

    6.7 几种循环的比较 9 6.8 break和continue语句 9 6.8.1 break语句 9 6.8.2 continue 语句 10 6.9 程序举例 11 7 数组 1 7.1 一维数组的定义和引用 1 7.1.1 一维数组的定义方式 1 7.1.2 一维数组元素的引用 2 7.1.3 ...

    c语言程序设计(第三版)

    6.7 几种循环的比较 9 6.8 break和continue语句 9 6.8.1 break语句 9 6.8.2 continue 语句 10 6.9 程序举例 11 6 7 数组 1 7.1 一维数组的定义和引用 1 7.1.1 一维数组的定义方式 1 7.1.2 一维数组元素的引用 2 ...

    谭浩强c语言word版

    6.7 几种循环的比较 79 6.8 break和continue语句 79 6.8.1 break语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 83 ...

    visual C++_Turbo C串口通信编程实践

    7.1.3 在串口通信中几种常用的用户层协议说明 7.2 数制、数据的表示及逻辑运算 7.2.1串口通信编程常用的数制 7.2.2 ASCII文本及其表示方法 7.2.3 逻辑运算与位运算 7.3 数据包校验与常用校验算法 7.3.1 ...

Global site tag (gtag.js) - Google Analytics