c语言数组的使用,c语言数组最大值
Yyds干货库存
一:一维数组
(1).数组的创建
定义:数组是相同类型元素的集合。
* * * * *创建方法:(重要)
type _ t arr _ name[const _ n];
//type_t是索引组的元素类型。
//const_n是用于指定数组大小的常量表达式。
(注意:数组名是数组第一个元素的地址)
比如:
int arr[8];//表示对数组中的元素进行整形,arr表示数组名,其中放置了8个元素。
float arr 3[2 3];//2 ^ 3是常量表达式。
double arr 4[5]=10;//浮点数不能准确地保存在内存中
int arr 5[n];//只有C99语法支持这种将变量放入[]的方式。VS2019不支持变长数组(数组的大小是可变的)。平时不要这样。
(2)数组的初始化(在创建数组的基础上给数组一些合理的初始值)
答:塑造阵列
1.完成初始化:Intarr [10]={1,2,3,4,5,6,7,8,9,10 };//像这样给出的初始值的个数与数组大小相同
2.初始化不完整:Intarr [10]={1,2,3,4 };//像这样,只有部分元素赋值,其余默认为0
3.int arr[]={ 1,2,3,4 };//如果没有像这样的指定大小,会根据初始化的内容确定其个数相当于int arr[4]={1,2,3,4 };
字符数组:
答:1。char ch1[3]={b , I , t}
2.char ch2[5]={b , I , t}
3.char ch3[]={b , I , t };默认3个字符
b:字符串形式(字符串带有一个\0)
char ch1[5]= bit ;//b i t \0 0 5元素
char CH2[]= bit ;//b i t \0 4个元素
注意:数组长度和字符串长度是两回事。
当长度由strlen确定时,ch1是3,3,ch2也是3。
(3).一维数组的使用
下标引用运算符[]用于数组的使用。它实际上是数组访问的操作符。
注意:使用下表访问数组。
数组下面的表都是从0开始的。
访问数组时,[]可以是变量,数组创建时必须是常量。
可以计算数组的大小。
int arr[10]
int SZ=sizeof(arr)/sizeof(arr[0])
例如:arr[4]=5;//将数组中的数字赋给下表4到5
#包含stdio.h
int main()
{
int arr[10]={ 0 };//初始化不完整
arr[4]=5;
printf(%d\n ,arr[4]);
返回0;
}
//output: 5 # includesdio.h
int main()
{
int arr[10]={ 0 };
arr[4]=7;
int SZ=sizeof(arr)/sizeof(arr[0]);//计算数组的大小
int I=0;
for(I=0;我我)
{
printf(%d ,arr[I]);//打印
}
返回0;
}
//输出:0 000 7 000 000
(4).一维数组在内存中的存储
接下来,让我们讨论数组在内存中的存储。
一个字节可以给一个地址,一个整数占用4个字节。
因此,一维数组是连续存储在内存中的。
随着数组下标的增加,地址由低变高。
二维数组
1.创建二维数组(数组前面的[]表示行,数组后面的[]表示列)
int arr[3][4];//塑造三行四列
字符排列[3][4];//三行四列字符
2.二维数组的初始化()
完成初始化:
初始化不完整:int arr1[3][4]={1,2,3,4,5 };//5后跟0
注意这个形式:int arr2[3][4]={{1,2},{3,4},{5,6 } };
注意:如果数组被初始化,行可以省略,但是列不能省略。
int arr[][4]={{1,2},{3,4},{5,6 } };//初始化可以确定几行。多少嵌套{}表示有多少行。
3.二维数组的使用
访问数组时,类似于一维数组,行从0开始,列从0开始。
#包含stdio.h
int main()
{
int arr[][4]={{1,2},{3,4},{5,6 } };
int I=0;
int j=0;
for(I=0;我我)
{
for(j=0;j j)
{
printf(%d ,arr[I][j]);
}
printf( \ n );
}
返回0;
}
//1 2 0 0
//3 4 0 0
//5 6 0 0
注意:二维数组的数组名表示第一个元素的地址,二维数组的第一个元素是第一行。
4.二维数组在内存中的存储
就像一维数组一样,先打印地址,得到每个元素的地址。
从图中可以看出,前四个地址是逐渐递增4的,第四个地址和第五个地址之差也是4。5%.
得出二维数组也是连续存储在内存中的结论。
一行内部连续,另一行也连续。
三。作为函数参数的数组
先举个例子:把一组降序的数字做成升序的数字如:9,8,7,6,5,4,3,2,1,0。
//冒泡排序
#包含stdio.h
VoidBubble _ Sort (Intarr [],Intsz)//参数arr本质上是一个指针。
{
int I=0;//一定要多走几趟。
for(I=0;I SZ-1;我)
{
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 arr[]={9,8,7,6,5,4,3,2,1,0 };
int SZ=sizeof(arr)/sizeof(arr[0]);//计算数组中的元素个数,不能放在bubble_sort函数中
bubble_sort(arr,SZ);//当数组作为参数传递时,传递数组的第一个元素的地址。
返回0;
}
//但是当我们给出一组升序的数字时,就会毫无理由的浪费效率。因此
//在函数中
VoidBubble _ Sort (Intarr [],Intsz)//参数arr本质上是一个指针。
{
int I=0;//一定要多走几趟。
flag=1;
for(I=0;I SZ-1;我)
{
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;
flag=0;
}
}
如果(标志==0)
{
打破;
}
}
}
当一个数组作为参数传递时,它的元素个数是无法在传递过去参数的数组的函数内部计算的,所以我们一般在main函数中计算。
注意:数组名是什么?
数组名是数组第一个元素的地址。
但是有两个例外:
1.sizeof(数组名)
此时的数组名代表整个数组,计算整个数组的大小。单位是字节。
2.数组名
这里的数组名代表整个数组,检索的是整个数组的地址。
在图中,我们可以看到地址在三种不同的情况下是相同的。
首先,后两个取第一个元素的地址没问题,但是从上面的特例可知,第一个应该是(整个)数组的地址。为什么?
实际上,数组的地址就是第一个元素的地址。虽然价值观相同,但意义不同。
Arr获取整个地址,打印时只显示第一个元素的地址。
加1时,前两者之差为40,后两者之差为4(地址形式为十六进制)。
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。