C-指针数组与数组指针

来源:互联网 发布:淘宝摄影发展趋势 编辑:程序博客网 时间:2024/04/28 18:21

C-指针数组与数组指针

说实话, C语言真的很让人蛋疼, 它不像面向对象的语言, 我们重心在设计程序上。
而使用C语言, 你不仅要考虑程序的设计, 你还要考虑很多他的使用细节,不然一不小心你怎么死的都不知道。
但是,个人感觉,C语言的魅力是其他任何语言都比不了的!!!, 继续看。。。

  • 基本点
    • 数组类型
      • C语言中数组有自己特定的类型
      • 数组的类型有元素类型和数组大小共同定义, 例如 int arr[5]; 对应的数组类型为 int[5]
      • 定义数组类型 : typedef type(name)[size], 例如
        • typedef int(AINT5)[5] -> AINT5 iArray; //定义了一个数组 int iArray[5];
        • typedef float(AFLOAT10)[10]
    • 数组指针
      • 数组指针用于指向一个数组
      • 通过&作用于数组名,我们就可以得到数组的地址
      • 可以通过数组类型来定义数组指针 AINT5* pa; //pa是一个指向 int[5] 的指针
      • 当然也可以间接定义数组指针 -> int (*p)[5]; //p为指向数组类型为int[5]的指针
    • 范例:
        typedef int(AINT5)[5];        typedef float(AFLOAT10)[10];        int main()        {            float fArray[10];            int a[5] = {0};            int (*a2)[5] = &a;              AINT5* a1 = a2;             AFLOAT10* pf = &fArray;             printf("%d, %d\n", sizeof(AINT5), sizeof(a));            int i = 0;            for(i=0; i<10; i++)            {                (*pf)[i] = i;            //  fArray[i] = i;                printf("%f\n", fArray[i]);            }
- 指针数组    - 指针数组是一个普通的数组    - 指针数组中的每一元素为指针    - 指针数组的定义为 type* pArray[n];
  • main函数的参数

    • main函数的参数可以理解为操作系统调用的函数
    • 在执行程序的时候可以向main函数传递参数
    • 范例: int main(int argc, char* argv[], char* env[])
      • argc: 命令行参数的个数, 包括命令本身
      • argv: 命令行参数指针数组
      • env: 环境变量的指针数组
      • -
  • 指向指针的指针

    • 指针变量在内存中会占用一定的内存空间(4 or 8)
    • 可以定义一个指针来保存指针变量的地址值(二级指针)
    • 二级指针存在的原因是
      • 指针本身是变量,对于指针当然也存在传值调用和传址调用
    • 二维数组与二级指针
      • 二维数组在内存中以一维方式排布
      • 二维数组的第一维是一维数组, 二维数组的第二维才是具体值
      • 二维数组的数组名同样可以看做指针常量, 还是首元素的地址,例如 &a[0][0] == a
  • 二维数组参数

    • 前面已经说过,C语言中的数组参数会退化为指针
    • 二维数组参数同样会退化,退化为数组指针
    • void g(int a[3][3], int len) -> void g(int a[][3], int len) -> void g(int (*a)[3], int len)
0 0
原创粉丝点击