指针 Day 03

1.二级指针

        使用场景:        

                ①函数体内部想修改函数体外部指针变量的值,需要传递指针变量的地址即二级指针
                ②指针数组的数组是二级指针

2.const指针(只读)
const int *p;
int const *p;
int *const p;
const int *const p;
int const *const p;
1 和 2 是等价的,const修饰*p, p可以改变指向, 不能利用p修改指向空间中的值
3,const修饰 p,p不能变,可以利用p修改指向空间中的值,所以一定要初始化
4 和 5 是等价的,const修饰p,也修饰*p,p不能变,*p也不能变,一定要初始化
const char *p = "hello world"; //只能用该字符串,不能利用指针修改字符串
3. void指针
void *p; //缺省类型指针,多用来表示内存地址
0x2000
void * -> int *、char *、double * 低精度转换为高精度无需类型转换
int *、char *、double * -> void * 高精度转换为低精度需要类型转换
主要用于作为函数的参数和返回值使用
fun(char *)
fun(int *)
fun(double *)
fun(void *);
4.指针数组和数组指针

        1)指针数组        

                int *a[5];     定义一个5个元素的数组,占40个字节的空间,每个元素是整形指针;

        2)字符型指针数组:
                char *str[5

                注: 二维数组用来存放字符串数组;
                        指针数组用来操作字符串数组。

        3)数组指针
                 int (*a)[5];    定义指针变量a,占8个字节空间,指针指向20个字节空间的一个数组

你可能感兴趣的:(算法,c语言)