数组:
是用来存储一组数据的容器.
//初始化方式
#include<stdio.h>
int main(){
//初始化:类型 数组名[长度]:{元素1,元素2,...};
int arr[3]={70,80,90};
//初始化二:单独初始化
int arr2[3];
arr2[0]=1;
arr2[1]=2;
arr2[2]=3;
//初始化3:省略长度
int arr3[]={70,80,90};
return 0;
}
特点:
1.数组必须要定义长度(正整数),定义时可初始化(长度必须是常量)或之后单独初始化.
2.数组是有序的,每个数组都有角标,从0开始分配,角标不能>=数组长度.类型一致.
3.数组有地址(数组名),里面的元素也有地址.数组当参数时(长度可省)传递的是地址.
#include<stdio.h>
int arrMy(int arr[]){
return sizeof(arr);
}
int main(){
int arr[]={1,2,3};
int num=arrMy(arr);
printf("%d---%lu\n",num,sizeof(arr)); //运行结果是:8---12
return 0;
}
4.数组当参数传递时是指针类型,所以如果需要用数组长度要额外传递.
数组第一个元素的地址就是这个数组的地址.二者是一致的.
#include<stdio.h>
int arrMy(int arr[]){
arr[0]=10;
return sizeof(arr);
}
int main(){
int arr[]={1,2,3};
printf("%d\n",arr[0]); //运行结果:1
int num=arrMy(arr);
printf("%d\n",arr[0]); //运行结果是:10
return 0;
}
二维数组:
管理一组有关联的数组
特点:
1.与数组基本一致,但传递子数组时传递的是地址
#include<stdio.h>
int main(){
int arr[2][3]={{1,2,3},{1,2,3}};
printf("%d\n",arr[0][1]); //运行结果:2
printf("%p\n",arr[1]); //运行结果:0x7fff5fbff7ec
return 0;
}
2.子数组数量控制行数,单个子数组长度控制列数
#include<stdio.h>
int main(){
int arr[2][3]={{1,2,3},{1,2,3}};
//遍历数组
for (int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
printf("%d\t",arr[i][j]);
}
printf("\n");
}
return 0;
}
3.每个子数组类型及长度一致
选择排序:
//选择排序
#include<stdio.h>
int main(){
int arr[6]={1,2,4,3,8,5};
int tempIndexMax=0;
for (int i=0; i<6-1; i++) {
tempIndexMax=i;
for (int j=i+1; j<6; j++) {
if (arr[tempIndexMax]<arr[j]) {
tempIndexMax=j;
}
}
printf("%d\n",tempIndexMax);
int temp=arr[i];
arr[i]=arr[tempIndexMax];
arr[tempIndexMax]=temp;
for (int i=0; i<6; i++) {
printf("%d\t",arr[i]);
}
printf("\n");
}
return 0;
}
/*运行结果
4
8 2 4 3 1 5
5
8 5 4 3 1 2
2
8 5 4 3 1 2
3
8 5 4 3 1 2
5
8 5 4 3 2 1
Program ended with exit code: 0
*/
冒泡排序
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a[]={1,2,4,3,8,5};
int n=(sizeof(a))/(sizeof(int));
int t=0;
for (int i=0; i<n-1; i++) {
for (int j=0; j<n-1-i; j++) {
if (a[j]<a[j+1]) {
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for (int k=0; k<n; k++) {
printf("%d\t",a[k]);
}
}
return 0;
}