c语言数组(待完善)
内容概要
一、定义数组
二、数组初始化
三、对于数组的理解
四、二维数组
1、定义数组
#include <stdio.h> int main(){ int array[5]; //定义一个整形数组 return 0; }
数组的定义与普通变量的定义类似,只是多了后面的中括号和数量
2、数组初始化
和变量的使用类似,数组也可以只定义,或者在定义时就初始化
#include <stdio.h> int main(){ int array[5] = {1,2,3,4,5} return 0; }
如果在定义数组时便初始化,中括号内可以不填数字;但如果没有初始化就必须填数字
这样会报错
#include <stdio.h> int main(){ int array[]; return 0; }
这样就不会报错
#include <stdio.h> int main(){ int array[] = {1,2,4,5,6}; return 0; }
不对等的初始化
#include <stdio.h> int main(){ int array[10] = {1}; for (int i=0; i<10; i++){ printf("%d\n",array[i]); //第一个元素为1,其它全部默认初始化为0 } return 0; }
如果没有初始化,便尝试遍历数组
#include <stdio.h> int main(){ int array[10]; for (int i=0; i<10; i++){ printf("%d\n",array[i]); //发现数组中会存有一些随机默认值 } return 0; }
3、对数组的一些理解
c语言中是没有字符串类型的,而c语言实现字符串是通过字符数组实现的(这样的理解可能有问题)
#include <stdio.h> int main(){ char str[] = {'h','e','l','l','o','\0'}; printf("%s\n",str); return 0; }
\0是字符串结束的标识。str数组存储首字符h的内存地址,这样字符串开始的字符就确定了,系统printf时,则要知道字符串何时结束,所以约定\0是字符串结束的标识
不加\0会出现问题
#include <stdio.h> int main(){ char str[] = {'h','e','l','l','o'}; char str2[] = {'y','e','s'}; printf("%s\n",str); printf("%s\n",str2); return 0; }
我将char str[] = "hello world";的语法看作字符数组的语法糖(这样定义字符串时,编译器自动在hello world后面加入\0)
#include <stdio.h> #include <string.h> int main(){ char str[] = "hello world"; printf("%s\n",str); printf("%d\n",sizeof(str)); // 12 printf("%d\n",strlen(str)); // 11 return 0; }
c语言数据要关注:是值还是内存地址,数据的长度是多少(多少个字节),编译器是否知道数据的长度
数据的跨度要保持一致,这样编译器才能按照规定的跨度读取下一个元素,这就导致了数组存储的数据类型必须一致

验证数组中的相邻元素之间的内存地址等于数据类型的字节长度
#include <stdio.h> int main(){ int array[5] = {1,2,3,4,5}; int i; for (i=0; i<5; i++){ printf("%d address is %p\n",i,&array[i]); } return 0; }
验证数组赋值
#include <stdio.h> int main(){ char str[] = "hello world"; str = "isadmire"; //程序报错了 return 0; }
4、二维数组
-定义二维数组
#include <stdio.h> int main(){ int array[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11}; int i,j; //遍历二维数组 for (i=0; i<3; i++){ for (j=0; j<4; j++){ printf("%d\n",array[i][j]); } } return 0; }
-让二维数组初始化更清晰(是大括号,而不是小括号)
#include <stdio.h> int main(){ int array[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11}, }; int i,j; // b for (i=0; i<3; i++){ for (j=0; j<4; j++){ printf("%d\n",array[i][j]); } } return 0; }
-全部初始化为0
#include <stdio.h> int main(){ int array[3][4] = {0}; int i,j; // b for (i=0; i<3; i++){ for (j=0; j<4; j++){ printf("%d\n",array[i][j]); } } return 0; }
-如果在定义时就初始化,第一个括号内可以不填参数,但是第二个空格必须加入参数
#include <stdio.h> int main(){ int array[][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11}, }; int i,j; // b for (i=0; i<3; i++){ for (j=0; j<4; j++){ printf("%d\n",array[i][j]); } } return 0; }
二维数组其实是一维数组的线上扩展

***待完善***
本文来自博客园,作者:口乞厂几,转载请注明原文链接:https://www.cnblogs.com/laijianwei/p/14521384.html

浙公网安备 33010602011771号