当前位置: 首页 > news >正文

c语言数组复习

1、一维数组

----------(1)、键盘输入 10 个数,求最大值和最小值(最简单的方法)

在这里插入图片描述
在这里插入图片描述

----------(2)、数组的逆置

#include<stdio.h>
void test01() {
	int arr[10] = { 0 };
	int n = sizeof(arr) / sizeof(arr[0]);
	int i;
	printf("请输入 %d 个数:", n);
	for (i = 0; i < n; i++) {
		scanf_s("%d", &arr[i]);
	}
	int low = 0;
	int high = n - 1;
	int temp; //中间变量
	while (low < high) {       //交换数组
		temp = arr[low];
		arr[low] = arr[high];
		arr[high] = temp;
		low++;
		high--;
	}
	printf("交换后的数组打印如下:");
	for (i = 0; i < n; i++) {
		printf("%d\t", arr[i]);
	}
}
int main() {
	test01();
	return 0;
}

在这里插入图片描述

2、二维数组

----------(1)、二维数组概述

二维数组本身就是数组的数组(站在编译器的角度分析问题)

int arr[3][4]                    

在这里插入图片描述

二维数组的总大小:行数 * 列数 * 每个元素的大小
数组的总大小:sizeof(arr)
行数:sizeof(arr)/sizeof(arr[0])                                   //总大小除以每一行的大小就是行数,sizeof(arr[0]) 每一行的大小,arr[0]行的数组名
列数:sizeof(arr[0)/sizeof(arr[0][0])                              //一行的大小,除以每一个元素的大小,就是列数

----------(2)、二维数值数组的初始化

------------------、分段初始化

//完全初始化
int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};
//如果完全初始化。,可以省略行数
int arr[][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};
//部分初始化
int arr[3][4] = { {1,2},{5,6},{9,10,11}};

------------------、连续初始化

//完全初始化
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//如果完全初始化。,可以省略行数
int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//部分初始化
int arr[3][4] = {1,2,5,6,9,10,11};

3、一维字符数组

----------(1)、一维字符数组初始化

------------------、追个元素初始化(不推荐)

int arr[5] = {'h','e','l','l','o'};   //使用这种方式系统在编译的时候不会自动加'\0'

------------------、使用字符串的方式初始化一维数组(推荐)

int arr[6] = "hello";       //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出

在这里插入图片描述

----------(2)、字符数组遍历

------------------、使用 for 循环遍历(逐个字符遍历)

int arr[6] = "hello";       //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出
int i;
for(i = 0;i<n;i++){
    printf("%c",arr[i]);
}

------------------、直接使用 %s 输出字符串,需要字符串的首元地址,遇见 '\0’会停止

int arr[6] = "hello";       //使用这种方式,数组的长度一定要大于字符串的长度,因为使用这种方式系统会自动在字符串后面加入 '\0',若数组的长度等于字符串的长度,那么编译的时候系统自动加入 '\0'会导致溢出
printf("%s",arr);    //arr是数组名,代表的是首元地址,一个一个输出直到遇见 '\0'停止

------------------、使用printf(“%s”,arr)输出可以int arr[5] = {‘h’,‘e’,‘l’,‘l’,‘o’}; 定义的数组嘛?(面试问题)

不会,会输出乱码,或者不输出,因为 printf(“%s”,arr) 输出的时候直到遇见 '\0’就会停止,但是若是使用printf(“%s”,arr)输出int arr[5] = {‘h’,‘e’,‘l’,‘l’,‘o’}; 由于int arr[5] = {‘h’,‘e’,‘l’,‘l’,‘o’}; 中系统不会自动加入 ‘\0’,所以使用printf(“%s”,arr)自然不会遇见 ‘\0’,所以使用 %s容易造成非法访问,自然也打印不出,或者出现乱码!!!!!!!!!!!!!!!!

相关文章:

  • 为什么我创建的百度百科没有过审?
  • Spring3.*中ASM和JDK8版本冲突问题及解决方案
  • Umi、React框架学习笔记
  • 测试开发 | 专项测试技术初识Hook
  • python2和python3环境安装
  • 目标检测模型设计准则 | YOLOv7参考的ELAN模型解读,YOLO系列模型思想的设计源头
  • 02.指针的进阶
  • windows下Docker部署Flask的教程
  • 【博客589】K8s Topology Spread Constraints
  • 四、template模板
  • 【Java|golang】1813. 句子相似性 III
  • 在linux安装redis
  • 使用react-bmapgl绘制区域并判断是否重叠
  • 总结 62 种在深度学习中的数据增强方式
  • 【BP靶场portswigger-客户端14】点击劫持-5个实验(全)
  • linux备份压缩
  • Keil中 Program Size
  • 初步学习MOOS-ivp
  • 【Chrome谷歌浏览器——帮助如何设置无头浏览器】
  • 【状态设计优化DP】Atcoder Beginner Contest E - Work or Rest