二维数组
C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素,第一行元素和第二行元素是线性的、连续存放的。
数组的定义:
#include<stdio.h>
void main()
{
/* 一维数组 */
int a1[5];
int a2[5] = {1,2,3};
/* 1 2 3 0 0 */
int a3[] = {1,2,3,4,5};
/* 二维数组 */
int b1[2][3];
/* 未赋值的均为0 */
int b2[2][3] = {{11,12},{22}};
/* 11 12 0
22 0 0 */
/* 如果对全部元素都赋值,那么第一维的长度可以不指定,第二维的长度不能省 */
int b3[][3] = {11,12,13,21,22,23};
/* 上面的数组有2行,下面的数组有3行 */
int b4[][3] = {{11,12},{21},{31,32}};
/* 11 12 0
21 0 0
31 32 0 */
}
字符串
- 在C语言中,是将字符串作为字符数组来处理的。
- 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符
‘\0’
作为标志。 - 在C程序中依靠检测
‘\0’
的位置来判断字符串是否结束,而不是根据数组的长度来决定字符串长度。 ‘\0’
代表ASCII码为0的字符,是一个空操作符,不可以显示,它什么也不做。- char c[] = “I am happy”;
- 在C语言中,数组名代表该数组的起始地址。
char str1[5],str2[5],str3[5];
/* str1 已经是地址了,所以不需要加& */
scanf("%s%s%s",str1,str2,str3);
printf("%d",str1);
可以得到数组的起始地址strcmp
,空格字符参加比较,它“大于”任何字母字符。scanf
和gets()
的区别:scanf
输入时,字符串中间的空格、tab均作为字符串的分隔符。gets()
输入时,能输入空格,并不作为分隔符,因为gets()
仅输入一个字符串。
字符串处理函数
gets(str)和puts(str)
gets(str)
的返回值是字符数组str的起始地址。记住,数组末尾会加一个‘\0’
。
strcat(str1,str2)
将str2接到str2后面。
- 连接后,str1后面的
‘\0’
取消,只在新字符串最后保留‘\0’
。 - str1必须足够大,可以将str2拼接到后面。
strcpy(str1,str2)和strncpy(str1,str2,n)
strcpy(str1,str2)
将str2复制到str1中去。
- str2必须足够大,至少大于str1的长度。
strcpy(str1,"china"); /* 正确 */
str1 = “china”; /* 错误 */
str1 = str2; /* 错误 */
strncpy(str1,str2,n)
将str2的前面n个字符复制到str1中去。
- str1中n之后的字符不变。
strcmp(str1,str2)
对str1和str2自左至右逐个字符比较(按ASCII码值大小比较),直到出现不同的字符或者‘\0’
为止。
- str1 > str2,函数值为 1
- str1 < str2,函数值为 -1
- str1 == str2,函数值为 0
strlen(str)
测量str的实际长度(不包括‘\0’
在内)。
char str[10] = "china";
pirntf(%d\n,strlen(str));
结果:5
strlwr()和strupr()
大小写转换。