目录
前言:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!
数组讲解(1)
题目—求10个整数的最大值
代码优化:
题目——打印乘法表:
数组传参,传的是首元素的地址!原因如下:
指针形式传地址:
全局变量举例讲解:
数组
一、一维数组的创建和初始化。
1.2 数组的初始化
数组创建未初始化是不可控的!最好初始化!
1.3 一维数组的使用
打印每个数组元素的地址:
总结:
1.4 一维数组在内存中的存储
打印地址形式对比:
2. 二维数组的创建和初始化
2.1 二维数组的创建
2.2 二维数组的初始化
通过结果我们可以分析到,其实二维数组在内存中也是连续存储的!
题目—求10个整数的最大值
//求10个整数中的最大值 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int max = 0; int i = 0; for (i = 0; i < 10; i++) { if(arr[i]>max) { max = arr[i]; } } printf("%d\n", max); return 0; }
代码优化:
int main() { int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 }; int max = arr[0]; //假设第一个元素就是最大值 int i = 0; for (i = 0; i < 10; i++) { if (arr[i] > max) { max = arr[i]; } } printf("%d\n", max); return 0; }
求解指定数组元素: int main() { int arr[10] = { 0 }; //输入值 int i = 0; for (i = 0; i < 10; i++) { scanf("%d ", &arr[i]); } int max = arr[0]; //假设第一个元素就是最大值 int max=-1或者其他数也不行 for (i = 0; i < 10; i++) { if (arr[i] > max) { max = arr[i]; } } printf("%d\n", max); return 0; }
题目——打印乘法表:
int main() { int i = 0; for (i = 1; i <=9; i++) { //打印一行 int j = 0; for (j = 1; j <= i; j++) { printf("%d*%d=%d\t", i, j, i * j); } printf("\n"); } return 0; }
int test() { int a = 10; int b = 20; return a, b; } int main() { int ret = test(); printf("%d\n", ret); return 0; }
数组传参,传的是首元素的地址!原因如下:
void test(int arr[]) { int a = 10; int b = 20; arr[0] = a; arr[1] = b; } int main() { int arr[2] = { 0 }; //int ret = test(); test(arr); printf("%d %d\n", arr[0],arr[1]); return 0; }
指针形式传地址:
void test(int *px,int *py) { int a = 10; int b = 20; *px = a; *py = b; } int main() { int x = 0; int y = 0; test(&x, &y); printf("%d %d\n", x,y); return 0; }
全局变量举例讲解:
a,b为全局变量,test、main函数都可以调用更改,不安全 int a = 0; int b = 0; void test() { int x = 10; int y = 20; a = x; b = y; } int main() { test(); printf("%d %d\n", a, b);//10 20 return 0; }
数组
一、一维数组的创建和初始化。
1.1 数组的创建
数组是一组相同类型元素的集合。
数组的创建方式:
type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小
数组创建的实例:
//代码1 int arr1[10]; //代码2 int count = 10; int arr2[count];//数组时候可以正常创建? //代码3 char arr3[10]; float arr4[1]; double arr5[20];
1.2 数组的初始化
数组的初始化是指:在创建数组的同时给数组的内容一些合理初始值(初始化)。
举例:
int arr1[10] = {1,2,3}; 不完全初始化,剩余的元素默认初始为0 int arr2[] = {1,2,3,4}; 不指定数组大小,则数组大小由初始决定 int arr3[5] = {1,2,3,4,5}; char arr4[3] = {'a',98, 'c'}; 98是字符b的ASCII码值 char arr5[] = {'a','b','c'}; char arr6[] = "abcdef"; 字符串初始化字符数组
数组创建未初始化是不可控的!最好初始化!
1.3 一维数组的使用
对于数组的使用我们之前介绍了一个操作符: [] ,下标引用操作符。它其实就数组访问的操作符。
#include
int main() { int arr[10] = { 0 };//数组的不完全初始化 //计算数组的元素个数 int sz = sizeof(arr) / sizeof(arr[0]); //对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以: int i = 0;//做下标 for (i = 0; i < 10; i++)//这里写10,好不好? i 打印每个数组元素的地址:
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //打印每个元素的地址 int i = 0; for (i -= 0; i < 10; i++) { printf("&arr[%d]=%p\n", i, &arr[i]); %p——打印地址 } return 0; }
总结:
1.一维数组在内存中是连续存放的
2.数组随着下标的增长,地址是由低到高变化的
1.4 一维数组在内存中的存储
仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得出结论:数组在内存中是连续存放的。
打印地址形式对比:
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //打印每个元素的地址 int *p =&arr[0]; int i = 0; for (i -= 0; i < 10; i++) { //printf("%p\n", p+i); //p+i 是数组中arr[i]的地址 printf("%p-----%p\n", p + i, &arr[i]); } return 0; }
int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //打印每个元素的地址 int *p =&arr[0]; int i = 0; for (i -= 0; i < 10; i++) { //printf("%p\n", p+i); //p+i 是数组中arr[i]的地址 //printf("%p-----%p\n", p + i, &arr[i]); printf("%d", *(p + i)); } return 0; }
2. 二维数组的创建和初始化
2.1 二维数组的创建
//数组创建 int arr[3][4]; char arr[3][5]; double arr[2][4];
2.2 二维数组的初始化
二维数组初始化举例:
int main() { int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; return 0; }
int main() { 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 }; //int arr[3][4] = { {1,2},{3,4},{5,6},7}; //printf("%d\n", arr[2][3]); int i = 0; for (i = 0; i < 3; i++) { int j = 0; for (j = 0; j < 4; j++) //列 { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
int main() { int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; 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]); } } return 0; }
通过结果我们可以分析到,其实二维数组在内存中也是连续存储的!