二维数组:
1. 声明二维数组:
二维数组的声明格式为 `类型 数组名[行数][列数];`,例如:
int a[3][4];
这里声明了一个名为 `a` 的二维数组,它有3行4列,总共12个整型元素。
二维数组可以看作是数组的数组,例如a[ 3][4],可以看作是三个一维数组的集合,即a[0],a[1],a[2]三个一维数组的集合
2. 初始化二维数组:
二维数组可以在声明时进行初始化,例如:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
如果初始化时省略行数,编译器会根据提供的列数和初始化值自动计算行数。
注意:列数不能省略,若初始化时输入元素数量小于数组总元素数量,会自动补0
int rows = sizeof(a) / sizeof(a[0]); //求出该二维数组a的行数
int cols = sizeof(a[0]) / sizeof(a[0][0]); //求出该二维数组a的列数
3. 访问二维数组元素:
通过指定行索引和列索引来访问二维数组中的元素,例如:
int a = a[1][2]; // 访问第二行第三列的元素
索引从0开始计数。
4. 遍历二维数组:
可以使用嵌套循环来遍历二维数组中的所有元素,例如:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
这段代码会打印出二维数组 `a` 的所有元素。
二维数组的内存布局:
二维数组在内存中是按行顺序连续存放的。第一行的所有元素首先被存储,接着是第二行,依此类推。因此,二维数组的第一行的起始地址与其第二行的起始地址在内存中是连续的。
二维数组倒序
for(i = 0; i < rows;++i)
{
for(j = 0; j < cols / 2; ++j)
{
t = a[i][j];
a[i][j] = a[i][cols - j - 1];
a[i][cols - j - 1] = t;
}
}
字符型二维数组输出较大的字符串
char s[][100] = {"Hello","World","China","America"};
int rows = sizeof(s) / sizeof(s[0]);
char max[100];
strcpy(max,s[0]);
int i,t;
for(i = 1;i < rows;++i)
{
t = strcmp(max,s[i]);
if(t < 0)
{
strcpy(max,s[i]);
}
}
puts(max);
字符串排序
char s[][100] = {"Hello","World","China","America"};
int rows = sizeof(s) / sizeof(s[0]);
int i,j,t;
char n[100];
for(i = 0;i < rows - 1;++i)
{
for(j = i + 1;j < rows;++j)
{
t = strcmp(s[i],s[j]);
if(t > 0)
{
strcpy(n,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],n);
}
}
}
for(i = 0;i < rows;++i)
{
puts(s[i]);
}
查找指定的字符串(使用二分法查找,需要先排序,在查找)
int begin,mid,end;
begin = 0;
end = rows - 1;
while(begin <= end)
{
mid = (begin + end) / 2;
if(strcmp(str,s[mid]) > 0)
{
begin = mid + 1;
}
else if(strcmp(str,s[mid]) < 0)
{
end = mid -1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("找到了,s[%d]=",mid);
puts(s[mid]);
}
else
{
printf("没找到");
}
函数
函数是组织好的、可重复使用的代码块,用于执行特定任务。函数可以提高代码的模块化,使程序更容易理解和维护。以下是一些关于C语言函数的基本知识点:
1. 函数定义:
函数定义包括返回类型、函数名、参数列表和函数体。例如:
int add(int a, int b)
{
return a + b;
}
这里定义了一个名为 `add` 的函数,它接受两个整型参数 `a` 和 `b`,并返回它们的和。
2. 函数声明(原型):
函数声明告诉编译器函数的名称、返回类型和参数类型,但不提供函数体。函数声明通常放在头文件中或在使用函数之前。例如:
int add(int a, int b);
3. 调用函数:
函数通过其名称和参数列表来调用。例如:
int sum = add(3, 4);
这里调用了 `add` 函数,并将返回值赋给了变量 `sum`。
4.返回值:
函数可以返回一个值,该值由 `return` 语句指定。如果函数的返回类型不是 `void`,则必须包含至少一个 `return` 语句。