C语言字符串与字符数组

1.定义:

字符定义:

char ch='A';//定义单个字符

 字符串定义:

    char* s;
	s = "abcd";

	char* s = { "abcd" };
	
	char* s = "abcd";

 注意:char *s;s={"abcd"};这种赋值方式是错误的,

字符数组定义:

char arr[] = "abcd";//这种方式定义时必须初始化
	char arr1[5] = { "abcd" };
	char arr2[5] = { 'a','b','c','d' };//以上两种方式定义时必须考虑‘\0'的存放
	/*char s[7];	s="abcdef";这种方式赋值是错误的,因为s本质是一个数组,
只能逐个赋值,如是s[0]='a';s[1]='b';*/
	/*char s[7];s[7] = "abcde";
这种方式也错误,是s[7]是数组最后一个元素,不能将字符串赋值给他*/
	
	//定义了一个两行三列的字符数组,其中每一行均可以看成是两个元素的一维数组
	char s[2][3] = { {"ab"},{"cd"} };
	printf("%s\n", s[0]);//输出结果为  ab

	//二维数组的初始化
	char s1[3][8] = { {"apple"},{"orange"},{"banana"} };
	//等价于 
	char s2[3][8] = {"apple","orange","banana"};

2.字符串的长度 

 (1)sizeof(arr)是求字符串所占空间大小,包括了'\0',对于字符数组,sizeof返回的是该数组定义时开辟的空间大小,如char c[3][4];sizeof(c)=12;另外,sizeof是一个操作符,并不是一个函数,如int   a;sizeof(a)=sizeof a=4;

    (2) strlen(arr)返回的是数组的实际长度,不包括'\0'。

3.字符串与字符数组的区别 

char arr1[] = "abc";
	char arr2[] = "abc";
	printf("arr1的地址%p\n",arr1);
	printf("arr2的地址%p\n", arr2);
	char* s1 = "abc";
	char* s2 = "abc";
	printf("s1的地址%p\n", s1);
	printf("s2的地址%p\n", s2);

可以发现,arr1与arr2的地址不相同,s1与s2的地址相同,这是编译器自动做的优化,节省内存空间 

区别一:定义不一样


1、字符串指针变量本身是一个变量,用于存放字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘�’作为串的结束。
2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。


区别二:对字符串指针方式不同


1、char *ps=”C Language”;可以写成char *ps;ps=”C Language”;
2、数组方式char st[]={”C Language”};不能写成char st[20];
St={”C Language”};只能对字符数组的各元素逐个赋值。

#include<iostream>
using namespace std;

int main(){
    //没有存储结束符的话就不是字符串,就是一个字符数组(单纯的字符数组) 
    //字符数组 
    char a[3]={'1','2','3'} ;
    //字符串
    char a[3]={'1','2','\0'} ;

    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值