C中定义字符串有下列几种形式

字符串常量,char数组,char指针之间的差异

1、字符串常量:

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

例如:

printf("%s","hello"); //"hello"
char m = 'h'; //只能赋值一个字母,并且用单引号‘’。

如果字符串文字中间没有间隔或间隔的是空格符,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'。

3、利用char指针定义字符串:

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

4、数组和指针区别:

数组形式:

char m[40] = "hello,world"; 

指针形式:

 char *m = "hello,world";

数组形式:

        编译器会把数组名m看作是数组首元素的地址&m[0]的同义词,m是个地址常量。可以用m+1来识数组里的下一个元素,但不能使用++m,增量运算符只能在变量前使用, 而不能在常量前使用。

例如:

char m[40] = "hello,world";
cout << m; //输出: hello,world
cout <<m+1; // 输出: ello,world

        m[40]在计算机内存中被分配一个有40个元素的数组(其中每个元素对应一个字符,还有一个附加的元素对应结束的空字符'\0')。每个元素都被初始化为相应的字符。 

指针形式:

        指针形式(*m)也会在静态存储区为字符串预留空间。此外,一旦程序开始执行,还要为指针变量m另外预留一个存储位置,以在该指针变量中能够存储字符串的地址。m指向字符串的第一个字符,可用++m指向第二个字符。 指针m是个变量。 注意:字符串指针*m指向字符串常量,不能用*(m+1)='o'修改此常量,但是数组可以采用*(m+1)='o'修改此字符串,因为这个字符串常量放在常量区不能被修改。

例如:

char *m = "hello,world";
cout << m; //输出: hello,world
cout << ++m; //输出: ello,world

数组与指针差异:

例子:

char str1[] = "hello world!";
char str2[] = "hello world!";
char *str3 = "hello world!";
char *str4 = "hello world!";

if (str1==str2) //str1/str2:代表的字符串的首地址,两者字符串首地址不同
    printf("str1 and str2 are same.\n");
else
    printf("str1 and str2 are not same.\n");

if (str3==str4) //str3/str4:代表的常字符串的首地址,两者的地址相同,同指向常字符串的首地址
    printf("str3 and str4 are same.\n");
else
    printf("str3 and str4 are not same.\n");

结果:

str1 and str2 are not same.
str3 and str4 are same.

注意事项:

        str1/str3: 代表字符串的首地址, 它等价于&str1[0]/&str3[0];

        *str1/*str3: 代表字符串的首字母,它等价于str[0]/str[3];

单引号('')与双引号("")的区别:

        单引号是用来定义单个字符;

        双引号是用来定义字符串;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐凡星

你的鼓励将是我的动力;

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值