int a =10;//初始化 int arr[10] = {1,2,3,4,5,6,7,8,9,10}//完全初始化 int arr[10] = {1,2,3,4,5} //不完全初始化,没有被初始化的自动用0代替 int arr2[] = {1,2,3,4,5} //根据初始化的内容来确定数组元素个数
字符数组的初始化
1 2 3 4 5 6 7 8 9 10 11 12
char ch[5] = {'b','i','t'}; //用单引号依次存放 char ch2[] = {'b','i','t'}; char ch3[5] = "bit";//元素 b i t \0 char ch4[] = "bit";//b i t \0 char ch5[] = "bit"; //b i t \0 四个元素 char ch6[] = {'b','i','t'}; //b i t 三个元素 printf("%s\n",ch5);//bit //有\0终止符 printf("&s\n",ch6);//bit烫烫烫it //没有\0,直到在内存中找到下一个\0才会停止 printf("%d\n",strlen(ch5));//3 printf("%d\n",strlen(ch6));//随机值
一维数组的使用
对于数组的使用,之前介绍了一个操作符:[],下标引用操作符。
1 2 3 4 5 6 7 8 9 10 11 12
intmain() { int arr[10] = {0}; arr[4] = 5;//[]-下标引用操作符 //给第五个元素赋值为5 int i = 0; int sz = sizeof(arr) / sizeof(arr[0]);//整个数组的大小/第一个元素的大小=数组的个数 for (i=0;i<sz;i++) { printf("%d",arr[i]); } return0; }
1 2 3 4 5 6 7 8 9 10 11 12
intmain() { printf("%x\n",0x12);//12 printf("%p\n",0x12);//00000012 int arr[10] = {0}; int i = 0; for (i=0;i<10;i++) { printf("&arr[%d] = %p\n",i,&arr[i]);//%p是按地址的格式打印-十六进制的打印 } return0; }
//数组的初始化-创建的同时给与赋值 int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//给每个数组都赋值 int arr[3][4] = {1,2,3,4,5,6,7};//不完全初始化,后面补0,字符数组补充'\0' int arr[3][4] = {{1,2},{3,4},{5,6}};
二维数组的省略
1 2 3
int arr[][] = {{1,2},{3,4},{5,6}};//err int arr[3][] = {{1,2},{3,4},{5,6}};//err int arr[][4] = {{1,2},{3,4},{5,6}};//成功运行
上面的例子可以说明,二维数组,行数可以省略但是列不能省略。
二维数组的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<stdio.h> intmain() { int arr[][4] = {{1,2},{3,4},{5,6}}; int i=0; int j=0; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%d",arr[i][j]); } printf("\n"); } return0; }
二维数组在内存中的存储
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<stdio.h> intmain() { int arr[][4] = {{1,2},{3,4},{5,6}}; int i=0; int j=0; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("&arr[%d][%d]=%p\n",i,j,&arr[i][j]); } printf("\n"); } return0; }