在这次完成再次赋值中,我们需要和一维数组相同,需要scanf的帮助,但是这次需要用循环分别控制行和列。
int main()
{
int arr[3][5] = { 0 };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
我们来试一下是否可以:
在二维数组中每个元素都是一个一维数组,一维数组在内存中是连续存放的,那对个一维数组也是连续存放的吗?
我们来打印出它们的地址来看看:
由此看来我们打印的是第一行最后一个个和第二行第一个的地址,它们的地址只相差一个int类型的大小,所以二维数组在内存中的存放也是连续性的,顾名思义就是每一个一维数组都是在下一个一维数组的后面连续存放的,?维数组的每??在内存中连续存放。
在C99标准之前,C语?在创建数组的时候,数组??的指定只能使?常量、常量表达式,或者如果我们初始化数据的话,可以省略数组??。
如下:
int main()
{
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};
return 0;
}
?这样的语法限制,让我们创建数组就不够灵活,有时候数组?了浪费空间,有时候数组??了不够?
的。
C99中给?个变?数组(variable-lengtharray,简称VLA)的新特性,允许我们可以使?变量指定数组??。
如下:
int main()
{
int n = a+b;
int arr[n];
return 0;
}
上??例中,数组 arr 就是变?数组,因为它的?度取决于变量 n 的值,编译器没法事先确定,只
有运?时才能知道 n 是多少。变?数组的根本特征,就是数组?度只有运?时才能确定,所以变?数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定?个估计的?度,程序可以在运?时为数组分配精确的?度。有?个?较迷惑的点,变?数组的意思是数组的??是可以使?变量来指定的,在程序运?的时候,根据变量的??来指定数组的元素个数,?不是说数组的??是可变的。数组的???旦确定就不能再变化了。
完成这个代码之前,我们还需要认识一几个库函数
1.strlen是用来计算字符串长度的,不包括\0,头文件为<string.h>
2.system是用来控制屏幕上的东西的,"cls"是让system执行删除指令头文件为<stdlib.h>。
3.Sleep是用来休眠的,就是让打印间隔多长时间再次打印,单位为毫秒。头文件为:<windows.h>。
代码演示:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
int main()
{
char arr1[] = "i don't mess you";
char arr2 [] = "################";
int left = 0;
size_t right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
printf("%s", arr2);
return 0;
}
?大家可以试试改进这个代码,在学习中找到乐趣也是很重要的,毕竟要学会劳逸结合。