一维数组的创建和初始化
一维数组的创建
数组:一组相同类型元素的集合
例如:
#include<stdio.h>
void main()
{
int arr1[10];
char arr2[10];
float arr3[30];
double arr4[20];
}
关于动态开辟:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
int n;
printf("请输入想要开辟数组空间的大小:\n");
scanf("%d", &n);
int* arr = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
arr[i] = i + 1;
}
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
free(arr);
}
一维数组的初始化
数组的初始化是指在创建数组的同时给你数组的内容一些合理的初始值
数组在创建的时候如果不只当数组确定的大小就需要初始化,数组元素的个数根据初始化的内容来确定
例如:
#include<stdio.h>
void main()
{
int arr1[10] = { 1,2,3 };
int arr2[] = { 1,2,3,4 };
char arr3[3] = { 'a',98,'c' };
int n1, n2, n3;
char arr4[] = { 'a','b','c' };
n1 = sizeof(arr4) / sizeof(arr4[0]);
char arr5[3] = { 'a','b','c' };
n2 = sizeof(arr5) / sizeof(arr5[0]);
char arr6[] = "abc";
n3 = sizeof(arr6) / sizeof(arr6[0]);
printf("%d,%d,%d", n1, n2, n3);
}
一维数组的使用
数组的元素时使用下标来访问的,下标从0开始
数组的大小可以通过计算得到
例如:
#include<stdio.h>
void main()
{
int arr[10] = { 0 };
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (int i = 0; i < n; i++)
{
arr[i] = i + 1;
}
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
一维数组在内存中的存储
数组在内存中是连续存放的,这也是数组元素可以随机访问的原因
例如:
#include<stdio.h>
void main()
{
int arr[5] = { 0 };
for (int i = 0; i < 5; i++)
{
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++)
{
printf("arr[%d]的地址为:%p\n", i, &arr[i]);
}
}
二维数组的创建和初始化
二维数组的创建
例如:
#include<stdio.h>
void main()
{
int arr1[3][4];
char arr2[3][5];
double arr3[4][5];
}
二维数组的初始化
例如:
#include<stdio.h>
void main()
{
int arr1[3][4] = { 1,2,3,4 };
int arr2[3][4] = { {1,2},{3,4} };
int arr3[][4] = { {1,2},{3,4} };
}
二维数组的使用
二维数组的使用也是通过下标的方式
例如:
#include<stdio.h>
void main()
{
int arr[3][4] = {0};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
arr[i][j] = j+1;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf(" %d ", arr[i][j]);
}
printf("第%d行打印完毕\n", i+1);
}
}
二维数组在内存中的使用
数组在内存中是连续存放的
例如:
#include<stdio.h>
void main()
{
int arr[3][4] = { 0 };
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
arr[i][j] = j + 1;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf(" %p\n", &arr[i][j]);
}
}
}
数组作为函数参数
在编写程序的时候,往往需要将数组作为参数传给函数
数组名在除以下两种情况外可以认为是数组首元素的地址:
sizeof(数组名),数组名表示整个数组:
#include<stdio.h>
void main()
{
int arr[10] = { 0 };
int n = sizeof(arr);
printf("%d\n", n);
}
&数组名,取出的是数组的地址,数组名表示整个数组;
#include<stdio.h>
void main()
{
int arr[] = { 1,2,3,4,5 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr);
}
例如:
#include<stdio.h>
void bubble_sort_try(int arr[])
{
int n = sizeof(arr) / sizeof(arr[0]);
printf("%d\n", sizeof(arr));
int tem;
for (int i = 0; i < n-1 ;i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] < arr[j + 1])
{
tem = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem;
}
}
}
}
void bubble_sort(int arr[], int n)
{
int tem;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] < arr[j + 1])
{
tem = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem;
}
}
}
}
void main()
{
int arr[] = { 22,45,943,8,83,2 };
int n = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, n);
for (int i = 0; i < n ; i++)
{
printf("%d ", arr[i]);
}
}
|