【学习笔记之我要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;
}
目录
相关文章
|
8月前
|
存储 C语言 C++
用数组名作函数参数
用数组名作函数参数
53 1
|
3月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
3月前
|
C++
魔法指针 之 数组名的理解
魔法指针 之 数组名的理解
17 2
|
3月前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
8月前
|
存储 C语言
使用数组名作函数参数
使用数组名作函数参数
65 0
|
8月前
数组名
【2月更文挑战第3天】数组名。
50 2
|
8月前
|
C语言 定位技术 存储
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
204 0
【C语言基础入门】二级指针、一维数组与指针、二维数组与指针
|
监控
数组与地址,数组名到底是什么?
数组与地址,数组名到底是什么?
104 0
|
算法 C语言
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
13【C语言 & 趣味算法】分糖果 问题。(数组名作为函数形参,亦即:形参数组名作 指针变量)
|
C语言
c语言 数组名和下标运算符
前面我们稍微提过数组的属性:数组名就是首元素的首地址,即 &a[0]==a; 则:int *p = &a[0] ; 也可写成 int *p = a ; 两者一摸一样,平时都是用第二种,因为写起来比较方便。
184 0