C语言5:数组与字符串

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个字节。

打印字符串:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值