ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

认识数组(C语言)

认识数组(C语言)
//定义数组 //一种自定义类型,可以存储大量数据,便于一次调用多个变量 //形式 //type arr_name[]; //由type(数组元素类型),arr_name(数组名)以及[](规定数组大小)三部分组成 //数组类型 //对于一个变量来说,去掉其变量名就是它的类型 //比如对于"char name[10]"而言,“char [10]"就是它的类型 //数组初始化 //在了解数组初始化之前,我们得了解数组中的元素是怎么调用的 //数组中的每个元素都有”下标“与之对应,这就像数组元素的身份证一样 //举例:int arr[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 其下标分布如下:0 1 2 3 4 5 6 7 8 9 //所以如果你想调用元素”6“ //你就得输入arr[5]来使用它(当然,也有其他调用它的方法) //注意,当字符串填入字符数组时,会带着'\0’一起成为数组元素 //完全初始化 //你可以理解为数学上的一一映射,初始化用{}大括号 //比如我有一个数组int arr[5],如果我要初始化这个数组,就得找5个int 类型的常量,把它们用大括号连起来 //比如:int arr[5]={1,2,3,4,5}; //这样的话,元素arr[0]-arr[4]就被赋予了相应的值 //也有一种书是化的方式是省略[]中的数字,直接初始化,这样数组元素的大小完全由初始化的元素个数决定 //字符串的初始化 eg;char arr="Hello World!"; //不完全初始化 // 顾名思义,就是少填了几个 //但是值得注意的一点就是,剩下没被初始化的元素会默认初始化为0 //所以我们对数组常见的初始化为:int arr[10]={0}; //数组的有关操作 //打印 //数组输入输出的思路都是把数组元素一个一个的调用出来实现的 //eg: //#include<stdio.h> // //int main() { // int arr[] = {1,2,3,4,5,6,7,8,9}; // for (int i = 0; i < 9; i++) { // printf("%d ", arr[i]); // } // printf("\n"); // return 0; //} //输出:1 2 3 4 5 6 7 8 9 //输入 //eg: //#include<stdio.h> // //int main() { // int arr[5] = { 0 }; // for (int i = 0; i < 5; i++) { // scanf("%d", &arr[i]); // } // for (int i = 0; i < 5; i++) { // printf("%d ", arr[i]); // } // printf("\n"); // // return 0; //} //输入:1 2 3 4 5 // 输出: 1 2 3 4 5 // //一维数组在内存中的存储 //举个例: //#include<stdio.h> // //int main() { // // int arr[5] = { 0 }; // for (int i = 0; i < 5; i++) { // printf("&arr[%d]=%p\n", i, &arr[i]);//%p用来打印地址 // } // // return 0; //} // 输出: //&arr[0] = 000000B2AC0FFC18 //&arr[1] = 000000B2AC0FFC1C //&arr[2] = 000000B2AC0FFC20 //&arr[3] = 000000B2AC0FFC24 //&arr[4] = 000000B2AC0FFC28 //由此可见,一维数组在内存中的存储时连续的 //数组元素个数的计算 //当我们想对数组中的每个元素都进行操作时,就要生成其所有的下标,而生成下标又要循环,所以数组的元素个数就是循环次数 //虽然当我们定义数组是就知道数组的大小,但当我们更改数组是,就会连带着与数组大小有关的计算都要改变,如果每一个都要人为去更改就很麻烦,所以我们就想去寻找求数组元素个数的方法 //数组是由数组元素组成的,数组元素的大小是固定的,所以数组的大小等于元素数乘以一个数组元素的大小 //所以我们只要求数组的大小,在用它除以一个数组元素的大小就可以得到数组元素的个数 //之前我们说过数组算是一种自定义类型,是变量类型的一种,那么我们就可一尝试用sizeof 来求数组的大小 //#include<stdio.h> // //int main() { // int arr[10] = { 0 }; // printf("%zu\n", sizeof(arr)); // // return 0; //} //发现输出上显示的是:40 //说明int arr[10]这个数组的大小是40字节 //我们知道,一个int 类型的变量的大小是4字节 //用40数以4,我们就得到了10 //我们还可以更简洁一点或更公式一点的做法 //比如:size_t num=sizeof(arr)/sizeof(arr[0]); //这样我们就求出了一个数组的元素个数 //多维数组 //这个概念类似于套娃 //把低一维的数组作为数组元素,就成了多维数组 //二维数组 //所以二维数组就把一维数组当成数组元素的数组 //形式为: type arr_name[][]; //其中,第一个[]表示行,第二个[]表示列 //这样表示我个人感觉有点不好记忆 //所以我的理解是第一个[]是用来规定数组元素个数的,第二个[]是用来规定每个元素的大小的 //这样理解有什么好处呢? //在后面会说到二维数组可以省略行但不能省略列有一定的帮助 //因为你若把二位数组理解成一种自定义类型的话,最重要的就是定义其单个的大小 //因为数组本质上算一种集合,单个元素的大小才是基础 //二维数组的存储 //我们依旧先写一个代码来演示一下: //#include<stdio.h> // //int main() { // int arr[2][3] = {1,2,3,4,5,6}; // for (int i = 0; i < 2; i++)//生成行下标 // { // for (int j = 0; j < 3; j++)//生成列下标 // { // printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]); // } // } // // return 0; //} // 输出: //&arr[0][0] = 000000D6276FF6E8 //&arr[0][1] = 000000D6276FF6EC //&arr[0][2] = 000000D6276FF6F0 //&arr[1][0] = 000000D6276FF6F4 //&arr[1][1] = 000000D6276FF6F8 //&arr[1][2] = 000000D6276FF6FC //不难发现,二维数组在内存中的存储也是连续,所谓分行分列,更像是一种分“区块”管理 //二维数组的初始化 //有了上面对二维数组在内存中的存储,对于其初始化也很容以上手了 //初始化的思路是:一行一行的填满,这一行填满自动填向下一行 //完全与不完全的区别就是,不完全初始化会把剩下元素自动初始化为0、 //按行初始化 //这个比较特殊吧 //就是你手动初始化时,可以不用把一行填满就去填下一行 //依旧写一行举个例: //#include<stdio.h> // //int main() { // // int arr[3][3] = { {1},{2,2},{3,3,3} }; // // for (int i = 0; i < 3; i++) { // for (int j = 0; j < 3; j++) { // printf("%d ", arr[i][j]); // } // printf("\n"); // } // // return 0; //} // 输出: //1 0 0 //2 2 0 //3 3 3 //这样应该很明确了吧 //二维数组的输入输出 //跟一维数组差不多,只不过要嵌套循环来生成对应的行下标和列下标 //依旧举个例子: //#include<stdio.h> // //int main() { // // int arr[3][3] = { 0 }; // // for (int i = 0; i < 3; i++) { // for (int j = 0; j < 3; j++) { // scanf("%d", &arr[i][j]); // } // } // for (int i = 0; i < 3; i++) { // for (int j = 0; j < 3; j++) { // printf("%d ", arr[i][j]); // } // printf("\n"); // } // // return 0; //} //输入: //1 2 3 //2 3 1 //3 1 2 //输出: //1 2 3 //2 3 1 //3 1 2 //变长数组 //全名应该叫变量长度的数组,就是填入[]的可以不是常数,可以是变量 //c99后新加的语法 //但是我用的是vs //vs不支持VLA,所以我就不演示了 //一个小练习: //打印一串字符串,但是要有动画感😊😊😊 //ps:把字符串存入字符数组时,打印时可以直接通过数组名来打印 //举个例: #include<stdio.h> #include<string.h> #include<windows.h> int main() { char arr1[] = "welcome to VCTCN!!!!"; char arr2[] = "********************"; size_t left = 0; size_t right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left++]; arr2[right] = arr1[right--]; printf("%s", arr2); Sleep(500); system("cls"); } return 0; }
返回列表