【学习笔记之我要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;
}
目录
相关文章
|
7月前
|
存储 C语言 C++
用数组名作函数参数
用数组名作函数参数
35 1
|
2月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
2月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
2月前
|
C++
魔法指针 之 数组名的理解
魔法指针 之 数组名的理解
12 2
|
7月前
|
存储 C语言
使用数组名作函数参数
使用数组名作函数参数
34 0
|
7月前
数组名
【2月更文挑战第3天】数组名。
42 2
数组名不表示首元素地址的两个特例
数组名不表示首元素地址的两个特例
|
监控
数组与地址,数组名到底是什么?
数组与地址,数组名到底是什么?
88 0
|
存储 算法 搜索推荐
【C语言】一维数组和二维数组(详解)
【C语言】一维数组和二维数组(详解)
255 0
|
存储 程序员 C语言
指针和二维数组|学习笔记
快速学习指针和二维数组
指针和二维数组|学习笔记