Maine

纵有疾风起,人生不言弃

4. C语言基础-数组和字符串

4.1 数组的基本使用:

语法:

类型名称 变量名[元素个数];

走代码:

int arr[10];                // 只声明
arr[0] = 1;                 // 赋值
arr[10] = 11;               // 数组越界(会导致运行时错误,谨慎!!!!)
int arr1[3] = {1, 2, 3}     // 初始化
int arr2[3] = {1, 2}        // 部分初始化
int arr3[3];
arr3 = {1, 2, 3}            // error 不能这样使用

int arr4[] = {1, 2, 3, 4}   // 编译器自动判断元素个数
int arr5[];                 // err 必须指定元素个数

int size = sizeof(arr1) / sizeof(arr1[0]); // 获取元素个数
for(int i=0; i<size; i++)
{
    printf("%d ", arr[i]);
}

细节:

  1. 使用 {} 初始化数组,只能在定义的时候一并初始化,不能先声明在初始化。
  2. 如果不初始化,默认给垃圾值,可以用 int a[10] = {0} 初始化一个空的数组。
  3. 使用 sizeof 运算可以计算数组大小(参考代码)。
  4. 数组越界很可怕。。。

多维数组:

多维数组其实是特别的一维数组,在内存当中没有多维,只有一维。

// 初始化
int arr[3][4] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
    {7, 8, 9}
};
// 另一种初始化方式
int arr2[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 7, 8, 9};

// 获取数组行和列的个数
int row = sizeof (arr)/sizeof (arr[0]);
int column = sizeof (arr[0])/sizeof (arr[0][0]);

4.2 字符串和字符数组

C语言本身没有字符串类型,用字符数组模拟。

字符串一定是字符数组,字符数组不一定是字符串

字符数组以 \0 结尾就是字符串(\0 等价于 0)

字符数组和字符串示例:

char a1[] = {'a', 'b', 'c'};            // 字符数组
char a2[] = {'a', 'b', 'c' 0};          // 字符串
char a3[10] = {'a', 'b', 'c'};          // 字符串,没有初始化的部分会自动补 0
char a4[] = {'a', 'b', '\0', 'c'};      // 输出:ab
char a5[] = "abc";                      // sizeof(a5) = 4,末尾有结束符   常用初始化方式
printf("a1 = %s: ", a1);                // 乱码,没有结束符

字符串的输入输出:

// 输入的字符串如果有空格,会被空格截断,后面的内容留在缓冲区
// 下一次读取的时候回自动读取
// scanf 不会做越界检查,因此它并不安全
char str[100];
scanf("%s", str); // 不需要加 & 符号,本身就是地址
printf("str: %s", str);
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注