介绍const修饰指针的用法,有三种情况。还介绍了void指针的用法
目录
一、void指针
1.定义:
void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类型的变量
一般形式为: void * <指针变量名称> ;
对于void指针,在没有强制类型转换之前,不能进行任何指针的算术运算
分析:
在把m、n的地址赋给p、q时存在一个隐式强制转换,这样等式两边类型才相同,然后在下面以整型格式输出时,为了满足格式必须要,转换成int *型才能符合要求;
在强制转换后,才能对p、q进行算术运算,因为强制转换类型之后才能知道存的是什么类型的数据,才能知道加1应该移动几个字节空间
注意:
32位机下指针类型都是4个字节,意思是指针存储的地址能达到32位,并不是指针加1就是移动四个字节,看加一后移动几个字节空间是看存储的是那种类型的数据
2.案例
void * malloc(size_t size);
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg);
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
void 指针在后续底层代码中用的比较多,因为在数据传入函数时还不知道该数据是什么类型,可以让void随机应变;
二、const
1.常量化变量的值
一般说明形式如下: const <数据类型> 变量名 = [<表达式>] ;
常量化变量是为了使得变量的值不能修改
变量有const修饰时,若想用指针间接访问变量,指针也要有const修饰。
2.常量化指针目标表达式
一般说明形式如下: const <数据类型> * <指针变量名称>[= <指针运算表达式>] ;
常量化指针目标是限制通过指针改变其目标的数值 ,但<指针变量>存储的地址值可以修改
3.常量化指针变量
一般说明形式如下: <数据类型> * const <指针变量名称>[= <指针运算表达式>] ;
使得<指针变量>存储的地址值不能修改,但可以通过 *<指针变量名称> 可以修改指针所指向变量的数值
4.常量化指针变量及其目标表达式
一般说明形式如下: const <数据类型> * const <指针变量名> = <指针运算表达式> ;
常量化指针变量及其目标表达式,使得既不可以修改<指针变量>的地址,也不可以通过*<指针变量名称>修改指针所指向变量的值
三、main函数参数
1.argc代表输入了几个参数(包括命令指令),argv把这几个参数的以字符串形式存放起来
总结与思考
⭕主要介绍了const修饰指针的用法,有三种情况。还介绍了void指针的用法
⭕思考 void指针有什么作用? main函数是否可以带参数(涉及到const指针)?