字符数组的运用

字符数组的运用

刷题的时候老是不会用字符串,看了好多大神的博文查漏补缺~

字符数组

char str[10]={ 'I',' ','a','m','','h','a','p','p','y'};

把10个字符分别赋给str[0]到str[9]10个元素。如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则其余的空间自动定为空字符

为了测定字符串的实际长度,C 语言规定了一个“字符串结束标志”,以字符’\0’代表。如果有一个字符串,其中第10个字符为’\0’,则此字符串的有效字符为9个。
也就是说,在遇到第一个字符’\0’时,表示字符串结束,由它前面的字符组成字符串。系统对字符串常量也自动加一个’\0’作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节’\0’是系统自动加上的。

sizeof的用法

sizeof用来计算一个变量,或者数据类型的长度,以字节为单位
比如在我的电脑上,sizeof(int)=4,sizeof(long)=8。还有一般要求的sizeof(char)=1。

直接的调用sizeof

如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。

如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。

int *a;
char b[30];
char *c;
printf("%d, %d, d\n", sizeof(a), sizeof(b),sizeof(c));

通过函数传递过来的地址

那么sizeof会把数组首地址和指针无差别当成是地址,即输出在该系统中地址的字节宽度,即(位宽/8)。

sizeof和strlen的区别

char arr[10] = "What?";
int len_one = strlen(arr);
int len_two = sizeof(arr); 
cout << len_one << " and " << len_two << endl; 

输出结果为:5 and 10

sizeof返回定义arr数组时,编译器为其分配的数组空间大小,不关心里面存了多少数据。
strlen只关心存储的数据内容,不关心空间的大小和类型。

应用1:求数组长度

#define ARRAY_SIZE(X) (sizeof(x)/sizeof(x)[0])

应用2:输入输出字符串

char str[1000];
scanf("%s",str);
printf("%s",str);

当str[i]!=0时说明有数据。

应用3:申请空间

对于数组存储字符串等,要多申请一位空间存放’\0’。

初始化字符数组:

char str[ ]={"I am happy"}; 

可以省略花括号,如下所示

char str[ ]="I am happy";

(注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的)

错误示范:
char str[ ];
str="I am happy";

最上面的初始化与下面的初始化等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};

而不与下面的等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};

前者的长度是11,后者的长度是10.

后者说明:字符数组并不要求它的最后一个字符为’\0’,甚至可以不包含’\0’

猜你喜欢

转载自blog.csdn.net/dcy85127900/article/details/83099483