【学习笔记之我要C】详解数组名

简介: 【学习笔记之我要C】详解数组名

一、数组名

//数组名是什么?
//数组名是数组首元素的地址
//但是有2个例外
//1.sizeof(数组名) - 数组名表示整个数组 - 计算的是整个数组的大小,单位是字节
//2. &数组名 - 数组名表示整个数组 - 取出的是整个数组的地址
int main() {
  int arr[10] = { 0 };
  printf("%p\n", &arr);// &arr取出的是数组的地址
  printf("%p\n\n", &arr + 1);
  printf("%p\n", arr);
  printf("%p\n\n", arr + 1);
  printf("%p\n\n", &arr[0]);
  int sz = sizeof(arr);//数组名表示整个数组
  printf("%d\n\n", sz);
  printf("%p\n", &arr[0]);
  printf("%p\n", &arr);//数组名是首元素的地址
  return 0;
}

38ba4543edb7454fb30c23434c46e6cf.png

由上图可以看出,第一组地址数大小之差是八进制下的28,转换为十进制就是40,是数组arr所有元素大小之和,所以&arr取出的是数组的地址,第二组地址数与第一组对应,证明&arr取出的是数组的地址;

 打印出40,说明sizeof(数组名)表示的是整个数组,sizeof(数组名)计算的是整个数组的大小,所以打印出的值是40;

 最后一组数的地址数一样,说明数组名是数组首元素的地址。

二、数组作为函数参数

  注:冒泡排序思想是两两相邻的元素进行比较,并且可能进行交换。

void bubble_sort(int arr[], int sz) {//形参arr本质是指针
  //确定趟数
  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 arr[] = { 9,8,7,6,5,4,3,2,1,0 };
  //排序为升序 - 冒泡排序
  //计算数组元素个数
  int sz = sizeof(arr) / sizeof(arr[0]);
  bubble_sort(arr, sz);
  return 0;
}
目录
相关文章
|
21天前
|
存储 C语言 C++
用数组名作函数参数
用数组名作函数参数
10 1
|
21天前
|
存储 程序员 C语言
C语言:数组名
C语言:数组名
|
5天前
|
存储 C语言
使用数组名作函数参数
使用数组名作函数参数
3 0
|
21天前
数组名
【2月更文挑战第3天】数组名。
26 2
|
12月前
|
监控
数组与地址,数组名到底是什么?
数组与地址,数组名到底是什么?
66 0
|
存储 算法 搜索推荐
【C语言】一维数组和二维数组(详解)
【C语言】一维数组和二维数组(详解)
141 0
带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系
带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系
63 0
带领大家认识 :指针数组,浅浅分析:数组名与&数组名的区别联系
|
存储 PHP 开发者
二维数组| 学习笔记
快速学习二维数组。
64 0
【C语言】数组名是什么
【C语言】数组名是什么
【C语言】数组名是什么
|
存储 Oracle 关系型数据库
指针数组和数组指针|学习笔记
快速学习指针数组和数组指针
69 0

热门文章

最新文章