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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】