C-指针数组与数组指针

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值