c语言提高day04

1.一维数组名称

  • 本身并不是一个指针

  • 有两种特殊的情况

    • 对数组名进行sizeof
    • 对数组名称取地址,过去的指针步长是整个数组的长度
  • 除了两种特殊情况外,都是指向数组中首元素的地址的指针

  • 数组名—指针常量,指针的指向不可以修改

  • 如果将数组名传入到函数参数中,可以提高可读性,通常写:int arr [ ]

  • 访问数组元素的时候,下表也可以是负数

2.如何定义数组的指针

  • 先定义出数组的类型,在通过类型创建数组指针
    • typedef int(ARRAY_TYPE)[4];
  • 先定义出数组指针的类型,再创建数组指针变量
    • typedef int(*ARRAY_TYPE)[4];
  • 直接创建数组指针变量
    • int (*pARR)[5] = &arr;

3.二维数组名称

  • 除了两种情况以外,都是指向第一个一维数组的指针

  • 两种特殊的情况

    • sizeof统计整个二维数组的长度
    • 对数组名称取地址 int(*p2)[3] [3] = &arr;
  • 二维数组做函数参数传递方式

    • void printArray( int p[][3] , int row, int col)

    • void printArray(int p[3][3], int row, int col) 可读性高

    • void printArray( int(*p)[3] , int row ,int col)

  • 数组指针,指针数组的区别

    • 数组指针: 是一个指向数组的指针 ,int (*p)[10];
    • 指针数组:是一个存放指针的数组, int *p[10];

4.指针数组的排序

  • 选择排序

    • 假设排序的规则从小到大
    • 先认定一个最小的小标为i,通过j= i + 1循环来找到真实最小值的下标
    • 判断认定的下标和真实的下标是否相等,如果不相等就交换两个元素
  • 练习:对指针数据进行从大到小排序

5.结构体的使用
  • 如果有使用typedef定义结构体,那么后面跟着的单词是类型的别名
  • 没有使用typedef,定义结构体,后面跟着的单词是一个结构体变量
  • 结构体数组
    • 在栈上开辟
    • 在堆区开辟

6.结构体赋值问题

  • 系统提供的赋值操作是简单的值拷贝,逐字节拷贝-浅拷贝
  • 如果属性中有指向堆区的内同,在释放期间会导致堆区重复释放,并且还有内存泄漏
  • 解决方案:利用深拷贝:手动赋值
你的支持是我最大的动力!
0%