C语言--指针与数组的爱恨情仇

       前言

        乃住性子, 守得寂寞, 未必强, 但必老!!!        


目录

       数组

       爱恨情仇

       相关类型总结

       关键字 const 作用于指针的两种情况

       拓展


       数组

        众所周知, 数组是一组形同类型元素的集合

        要点

                1, sizeof(数组名(注意,这里只能有数组名,其他任何符号都不能有) ),  这里的数组名表示整个数组, 计算的是整个数组的大小.

                2, &数组名, 这里的数组名表示整个数组, 取出的是整个数组的地址

                3, 除了上述两点特例, 其余所有的数组名都表示数组首元素的地址.

                4, 字符数组的初始化方式:

                        1), 以单字符进行初始化, 末位不会自动补上 \0;

                        2), 以字符串的形式进行初始化, 末位会自动补上 \0; 


       爱恨情仇

        注: 下述全部以整形int 为例

        指针数组: 是数组, 存放指针的数组.

                        定义: int *a[10] ;   

                                解读: 变量a先与[10] 结合, 表明现在在定义一个可以存放10个元素的数组, 然后* 与 a[10] 结合, 表示存放的10个元素是指针类型的, 最前面的int 表示这10个指针是int类型的. 

                        类型: int * [10]  (注:数字不同, 类型不同,下同)

        数组指针: 是指针, 指向数组的指针.

                        定义: int (*a) [10] ;

                                解读: 变量a 先与 * 结合, 表明现在在定义一个指针, *a 再与 [10] 结合, 表明这个指针是指向数组的, 最前面的int则表示, 指针指向的这个数组存放的是int类型的数据. 

                        类型: int (*) [10]  ;

        函数指针: 是指向函数的指针.

                        初始化定义: int (*p)(int, int) = &函数名 (这里的&符号可以加上, 也可以不加, 直接写函数名) (&函数名表示的是函数的地址, 函数名也表示函数的地址)

                                解读: (指向的函数返回的类型) (*p) ((函数的)参数1的类型, (函数的)参数2的类型.....)

                        类型: int (*) (int, int)

                        应用: 可以通过函数指针间接调用函数, 两种应用方式:

                                1, int a = p(实参1, 实参2);

                                2, int a = (*p)(实参1, 实参2);

                                (注意两种方式的区别, *号可以不加, 但是加上的话,就必须加上()使用)

        函数指针数组: 存放函数指针的数组

                        定义: int (*parr[10])(int, int) ;

                               解读: (*parr[10]) 表明现在在定义一个指针数组, 剩余的部分表明这个数组存放的指针的类型是函数指针.

                        类型: int (*[10])(int, int)

        回调函数: 通过函数指针调用的函数就是回调函数

                  


       相关类型总结

        注: 以int类型为例:

        一维数组的类型: int[10];

        二维数组的类型: int[10][10];

        一级指针的类型: int * ;

        二级指针的类型: int** ;

        指针数组的类型: int * [10];

        数组指针的类型: int (*) [10];

        函数指针的类型: int (*) (int, int);

        函数指针数组的类型: int (*[10]) (int, int);   


       关键字 const 作用于指针的两种情况

        1, 定义指针的时候 const在*号的右边, 这时候意味着 该指针指向的地址空间不能再改变, 只允许修改此空间中的值;

        2, 定义指针的时候 const在*号的左边, 这时候意味着, 该指针可以修改指向的地址空间, 但是不允许通过指针修改指向的地址空间内的值.

        const 可以同事放在 * 的左右两边;


       拓展

        字符串表达式的结果是 字符串中首字符的地址            


        我是专注学习的章鱼哥~

你可能感兴趣的:(C语言基础,c语言,数据结构)