前言
乃住性子, 守得寂寞, 未必强, 但必老!!!
目录
数组
爱恨情仇
相关类型总结
关键字 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);
1, 定义指针的时候 const在*号的右边, 这时候意味着 该指针指向的地址空间不能再改变, 只允许修改此空间中的值;
2, 定义指针的时候 const在*号的左边, 这时候意味着, 该指针可以修改指向的地址空间, 但是不允许通过指针修改指向的地址空间内的值.
const 可以同事放在 * 的左右两边;
字符串表达式的结果是 字符串中首字符的地址
我是专注学习的章鱼哥~