数组
一维数组的创建和初始化
//创建
类型 数组名 [元素个数];
int arr[10];
char arr2[5];
//初始化
int arr[10]={1,2,3}; //不完全初始化
char arr[5]={'a','b'};
char arr3[5]="ab";// 每一位为:a,b,末尾有\0
char arr6[]="abcdef"; //没有确定长度则必须进行初始化,根据初始化的内容自动确定长度
一维数组的使用
#include<stdio.h>
#include<string.h>
int main()
{
int i,n,sz1,sz2;
int arr1[]={1,2,3,4,5};
sz1=sizeof(arr1)/sizeof(arr1[0]);
char arr2[]={'a','b','c'};
sz2=strlen(arr2);
for(i=0;i<sz1;i++)
{
printf("%d ",arr1[i]);
}
printf("\n");
for(n=0;n<sz2;n++)
{
printf("%c ",arr2[n]);
}
return 0;
}
一维数组在内存中的存储
数组在内存中是连续存放的
二维数组的创建和初始化
//创建
类型 数组名[行数][列数];
int arr[3][4];
char ch[3][5];
double arr[3][4];
//初始化
int arr[3][4]={1,2,3,4};
int arr[3][4]={{1,2},{4,5}};
int arr[][4]={{2,3},{4,5}}; //注意:列绝对不能省略!只能省略行!
易错点:
int a[3][3]; ————————>数字3,3代表这个数组有3行3列 是几就是几
a[2][1] —————————————>数字2,1代表第3行第2列 =下标+1
二维数组的使用
#include<stdio.h>
int main()
{
int arr[3][4]={{1,2,3},{4,5}};
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
二维数组在内存中的存储
二维数组在内存中其实是连续存储的,即每一行和下一行首位相连
数组作为函数的参数
冒泡排序实现数组以升序排列
相邻元素两两比较,例: 5 4 3 2 1
先排5
5 4 3 2 1
—>4 5 3 2 1
—>4 3 5 2 1
—>4 3 2 5 1
—>4 3 2 1 5 //一趟冒泡排序,比较了4对
再排4
—>3 4 2 1 5
—>3 2 4 1 5
—>3 2 1 4 5
再排3
—>2 3 1 4 5
—>2 1 3 4 5
再排2
—>1 2 3 4 5
n个元素需要n-1趟冒泡排序
#include<stdio.h>
void bubble_sort(int arr[],int sz)//虽然arr[](注意此处的括号不可以省略!!!!)本质是一个指针,但是不能写成int*
{
//确定冒泡排序的趟数
int i = 0;
for(i=0;i<sz-1;i++)
{
int j =0;
//确定每一趟要对比的对数
for(j=0;j<sz-1-i;j++)
{
if(arr[j]>arr[j+1])
{ //不满足条件则交换两个数的位置
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
int main()
{
int i=0;
int arr[]={9,8,7,6,4,5,3,2,1,0};
int sz = sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz);
for(i=0;i<sz;i++)
printf("%d ",arr[i]);
return 0;
}
数组名是什么意思?
arr 代表数组的首元素的地址,(所以不能随意乱用arr)但有两个例外:
sizeof(arr); 此处的arr代表的是整个数组
&arr arr代表整个数组,此处取的是整个数组的地址,&arr+1代表跳过整个数组以后的第一个地址
标签:初始化,arr,int,笔记,C语言,char,数组,sizeof From: https://www.cnblogs.com/arongsec/p/17573295.html