c语言动态数组定义(C语言数组)

1、数组概述与基本操作
数组定义与概念
数组是一种复合类型的数据结构,由同一类型的变量在内存中连续存储组成。在定义数组时,必须指定数组的大小(或长度),且这个大小必须是一个整型的常量表达式,不能是变量或变量表达式。
错误数组定义示例
以下是一些错误的数组定义方式:
1. `int n = 3;` 正确,但接下来 `int b[n];` 是错误的,因为n是变量,非常量表达式。
2. `int c[10.3];` 错误,因为数组大小必须是整数。
正确数组定义示例
使用宏定义可以定义数组:`(important) define m 4 int d[m];` 这是正确的。
当定义数组时未指定大小,而只是给出了初始化值,编译器会自动识别数组的大小。例如:`int e[] = {1,2,3,4};` 数组e的大小为4。
数组内存布局与操作
一维数组在内存中是一块连续的内存单元。数组名本质上是数组首地址,例如 `int a[3] = {1,3,4};` 则 `a` 是数组首地址,`a+i` 等于 `&a[i]`。我们可以通过 `printf` 打印数组元素在内存中的地址。
数组长度计算与排序
可以使用 `sizeof(a) / sizeof(int)` 计算数组的长度。即使初始化时只给了部分值,数组其他位置默认会被赋值为0。文章还介绍了冒泡排序和选择排序两种基本的排序算法。
2、二维数组简介
3、字符串与数组的关系
字符串其实是一种以` `结尾的字符数组。字符数组和字符串有几种等价的表示方式,如 `char str[] = “china”;` 或 `char str[] = {'c', 'h', 'I', 'n', 'a', ' '};` 等。但需要注意,数组的赋值不能直接通过名字进行,例如 `char str[10]; str = “china”;` 这样的写法是错误的。没有` `结尾的字符序列不能当作字符串处理。
