字符数组
用来存放字符数据的数组就是字符数组,字符数组一个元素存放一个字符。
例”ADSD123\n”字符串 C语言会默认在字符串末尾加个/0 作为字符串结束,该字符串共有9个字节。
可以用 char s[10] = “Hello”; 来初始化 如果未完全初始化,剩余的字符数组元素全部补0(/0的ASCII码也是0)。初始化字符数组大小要算上最后一个结束标志/0。
打印字符数组时可以用 s[i] != ‘\0’ 来作为结束条件。
也可以用 puts(const char *s); 来打印字符串。s = &s[0]
输入字符可以用 gets(char *s); 来进行输入字符。
Scanf(“%s”,s); 也可以用来输入字符串,但是不能带空格和tab,scanf会将空格作为结束标志
size_t strlen(const char *s); size_t ó unsigned long
可以用strlen来计算字符串有效字符个数。使用时需要包含头文件#include<string.h>
sizeof(s)计算的是s数组的容量。
“1234”与1234的区别 1234为int整形 占四个字节 “1234”为字符串 为数组 占5个字节是匿名数组 ,为常量 只能为右值,不能被修改。
可以使用char *strcpy(char *dest, const char *src); 来进行复制字符数组。
例 s1[100] = “Hello” s2[100]; strcpy(s2,s1); //将s1数组里的元素复制到s2中。
可以使用char *strcat(char *dest, const char *src); 来进行数组连接
例 strcat (s1,s2); 可以将s2字符数组 放在 s1的后面。
int strcmp(const char *s1, const char *s2); 可以用来进行字符数组比较,比较方式是从第一个元素开始比较 字符ASCII码大小,如果相等则比较第二个元素,如果完全相等则两个字符数组相同。
返回值为 int 型 ,返回值大于0 则s1 > s2 ,小于0 则s1 < s2 ,等于0则 s1 = s2。
返回值为 s1[i]里的ASCII码减s2[i]里的ASCII码
代码练习:
e1.定义一个数组s[100] 将整形 i = 1234 转换为字符型 存入 s[100]中。
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
int i = 1234;
char s[100];
int n,j = 0;
while ( i != 0)
{
n = i % 10;
s[j] = n + '0';
i /= 10;
j++;
}
s[j] = '\0';
puts(s);
int len = strlen(s);
for(j = 0; j < len / 2; ++j)
{
char t = s[j];
s[j] = s[len -j - 1];
s[len - j - 1] = t;
}
puts(s);
return 0;
}
二维数组
二维数组定义的一般形式为:
类型名 数组名【 常量表达式 】【 常量表达式 】;
例: int a[3][4];
可以将a[3][4]看成一个有3个一维数组 每个数组有4个整形。
a[0] 代表着a[0][0]~a[0][3]整个一维数组。
二维数组具有 1.单一性:a[0] – a[2]内都是有4个整形
2.有序性:a[0]的内存空间小于a[1]
3.连续性:a[0] – a[2]在内存空间内是连续的没有被打断
无论是几维数组都可以递归到一位数组来解释。
二维数组初始化如下:int a[3][4]
语法规定,初始化时可以省略靠近变量名[]内的常量;如int a[ ][4];
求二维数组行数可以用 sizeof(a) / sizeof(a[0]);
求二维数组列数可以用 sizeof(a[0]) / sizeof(a[0][0]);
a[0] 表示的是 a[0][0]~a[0][3] 四个整形。
代码练习:
e2.创造一个二维数组a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};求出该二维数组每个元素的平均值。
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int rows = sizeof(a) / sizeof(a[0]);
int cols = sizeof(a[0]) / sizeof(a[0][0]);
int i, j, sum = 0;
for(i = 0; i < rows ; ++i)
{
for(j = 0; j < cols ; ++j)
{
sum += a[i][j];
}
}
printf("%f\n",sum / (float)(rows * cols));
return 0;
}