1 数组:
存储和处理一组数据类型相同的数,在内存中占据一块连续的存储区域。
1 一维数组
1 一维数组的定义
类型说明符 数组名[常量表达式]
int code[5];
注意:数组下标是从0开始
整形数组:int array[10];
字符数组:char name[10];
浮点数组:float score[10];
2 数组的地址
数组在内存中占据一块连续的存储区域。
对数组 int code[5]来讲,
字符的首地址code[0]可这样返回:printf("code数组的首地址是:%d\n", code);
code[1] 就是在code[0]的基础上新增4个字节,因为int类型占用4个字节。
3 一维数组的初始化
有以下2种方法:先定义数组、再进行初始化;定义的同时进行初始化
1 先定义数组、再进行初始化
void main(){
int code[5];
code[0]=1;
code[1]=2;
code[2]=3;
code[3]=4;
code[4]=5;
}
2 定义数组的同时进行初始化
int code[5] = {1,2,3,4,5};//定义整形数组、同时进行初始化
或者数组元素的个数也可以省略:
int code[] = {1,2,3,4,5};
其他常用初始化方式:
定义数组时候,省略数组总个数:
int code[10]={1,2,3,4,5}; //数组有10个元素,前5个初始化,后五个自动初始化为0
int code[]={1,2,3,4,5}; // 数组有5个元素,code[0]=1, code[1]=2......
元素初始化为1:
int code[5]={1}; //这样更简洁
4 一维数组的操作:使用同一个数组名,不同的下标
for (int i=0;i<5;i++){
printf("code[%d] is %d\n", i, code[i]);
}
5 数组名作为参数传递
将数组元素逆序排序
可以把打印数组元素也抽象成一个方法:
#include <stdio.h>
#define SIZE 5
void reverseArray(int array[SIZE]);
void printArray(int array[SIZE]);
void main(){
int nums[SIZE]={1,3,5,7,9};
printf("打印出原始数组:");
printArray(nums);
printf("打印出逆序数组:");
reverseArray(nums);
printArray(nums);
}
void reverseArray(int array[SIZE]){
int temp = 0;
for (int i=0;i<SIZE/2;i++){
temp = array[i];
array[i] = array[SIZE-i-1];
array[SIZE-i-1] = temp;
}
}
void printArray(int array[SIZE]){
for (int i=0;i<SIZE;i++){
printf("数组元素是:%d",array[i]);
}
printf("\n");
}
2 二维数组
1 二维数组的定义
类型说明符 数组名 [行数][列数]
比如:int a [3][4]; 定义一个二维数组a,3行4列
二维数组的内存地址:先第一行从左到右,再第二行。。。一直到最后一行
2 二维数组的初始化:两种:先定义在初始化;定义的同时初始化
1 先定义再初始化:
int a[3][4];
a[0][0]=1;
a[2][3]=6;
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};//二维数组在内存中是按线性顺序存储的,可以省略内部括号。但是最好别省,更方便人看
或者省略总行数:
int a[][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
但是列数是不能省略的。编译器会根据总数及列数,自动算出数组的行数。
int a[3][4] = {{1},{5}{9}};
等价于:int a[3][4] = {{1,0,0,0},{5,0,0,0},{9,0,0,0}};
3 二维数组的操作:使用双重循环遍历数组元素,外层循环控制行数,内层循环控制列数
给二维数组a[3][4]:赋值0-11
#include <stdio.h>
#define ROW 3
#define COLUMN 4
void main(){
int array[ROW][COLUMN];
for (int i=0;i<ROW;i++){
printf("第%d行:\n", i);
for (int j=0;j<COLUMN;j++){
array[i][j] = COLUMN*i+j;
printf("第%d行,第%d列的值为:%d\n ",i,j,array[i][j]);
}
}
}
2 求二维数组对角线的和
1 2 3
4 5 6
7 8 9
左对角线:i+j=2,右边对角线:i=j
2 字符串
1 字符串定义
字符串是使用双引号包含的字符序列,也可以把字符串称为字符串常量。
编译器会自动加\0作为结尾,比如"hello world"看着有11位,但是在内存里有12个字节,因为有\0
字符串中有12个字节。
2 字符串和字符数组
字符数组是由字符构成的数组,和其他数组一样,可以先定义再初始化;或者定义的同时进行初始化。比如:
char c[11]= {'h','e','l','l','o',' ','w','o','r','l','d'};
或者
char c[]= {'h','e','l','l','o',' ','w','o','r','l','d'};
或者
char c[]= {“hello world”};
或者 char c[]= “hello world”;
字符数组有11个字节。
打印字符串: