c(数组)
数组名意为首元素(下标为零的元素)地址,打印数组名就是打印首元素地址(除以下两种情况外,所有数组名都表示数组首元素的地址)
两个例外(重点):
- sizeof(数组名),是计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组
- &数组名(如:&arr),取出的是数组(整个数组)的地址,&数组名:中数组名表示整个数组。
示例:
#include<stdio.h>
int main()
{
int arr[] = { 1,2,4,5,6 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);//&为取地址符
}
示例结果:003AFAF4 003AFAF4
遍历数组地址
- 获取数组地址用%p
- 数组在内存中的地址以十六进制形式连续存储
示例:
#include<stdio.h>
#include<string.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int i;
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组大小
for (i = 0; i < sz; i++)
{
printf("%p\n", &arr[i]);
}
示例结果:
00DBFD18
00DBFD1C
00DBFD20
00DBFD24
00DBFD28
00DBFD2C
00DBFD30
00DBFD34
00DBFD38
00DBFD3C
二维数组
-
二维数组的行可以省略不写,但列不能省略(如:arr[][4])
-
二维数组在内存中的存储方式跟一维数组相同
二维数组初始化示例:
#include<stdio.h> int main() { int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };//三行四列 }
冒泡排序代码示例:
#include<stdio.h>
void bubble_sort(int arr[],int sz)
{
for (int i = 0; i < sz - 1; i++)
{
int flat = 1;
for (int j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp;//定义一个tmp局部变量
//使arr[j]大于arr[j+1]时,两个数调换位置
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flat = 0;
}
}
if (flat == 1)//当if语句没有执行时,flat为1,说明该数组已经是一个以升序排列的数组了
{
break;
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1 };//定义一个无序数组arr
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组长度
bubble_sort(arr,sz);//调用升序冒泡排序函数
for (int i = 0; i < sz; i++)
{
printf("%d\t", arr[i]);//输出排成升序的arr数组
}
return 0;
}
补:
定义一个数组(如:int arr[10])
arr:是数组名
int [10]:是数组类型
如:计算数组所占空间大小用sizeof有两种方式
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
printf("%d\n", sizeof(arr));//结果:40
printf("%d\n", sizeof(int [10]));//结果:40
return 0;
}