指针本质分析
Posted chengeputongren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针本质分析相关的知识,希望对你有一定的参考价值。
指针本质分析
- 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?
- 可以通过指针改变另一个变量的值
- 指针的本质为变量(只要是变量,就有地址),不过说这种变量很特殊,它存储的是变量的地址值
- 在指针声明时,*号表示所声明的变量为指针
- 在指针使用时,*号表示取指针所指向的内存空间的值
- *号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值
- 不同的指针,所占用的内存是一样的。所有的32位系统中,指针所占用的的字节是4
传值调用与传址调用
- 指针是变量,因此可以声明指针参数
- 当一个函数体内部需要改变实参的值时,需要使用指针参数
- 函数调用时,实参值将复制到形参
- 指针适合复杂数据类型的函数参数中
常量与指针
1 const int*p; //p可变,p指向的内容不可变 2 int const*p; //p可变,p指向的内容不可变 3 int* const p; //p不可变,p指向的内容可变 4 const int* const p; //p和p所指向的内容都不可变
口诀:左数右指,当const出现在*号左边时指针指向的数据为常量,当const出现在*号右边时指针本身为常量
1 #include <stdio.h> 2 int main() 3 { 4 int i = 0; 5 const int *p1 = &i; 6 int const *p2 = &i; 7 int* const p3 = &i; 8 const int * const p4 = &i; 9 p1 = NULL; //ok 10 *p1 = 1; //error 11 p2 = NULL; //ok 12 *p2 = 1; //error 13 p3 = NULL; //error 14 *p3 = 1; //ok 15 p4 = NULL; //error 16 *p4 = 1; //error 17 return 0; 18 }
运行结果:
1>------ 已启动全部重新生成: 项目: 常量和指针, 配置: Debug Win32 ------
1> main.c
1>j:c语言练习题常量和指针常量和指针main.c(15): error C2166: 左值指定 const 对象
1>j:c语言练习题常量和指针常量和指针main.c(18): error C2166: 左值指定 const 对象
1>j:c语言练习题常量和指针常量和指针main.c(20): error C2166: 左值指定 const 对象
1>j:c语言练习题常量和指针常量和指针main.c(23): error C2166: 左值指定 const 对象
1>j:c语言练习题常量和指针常量和指针main.c(24): error C2166: 左值指定 const 对象
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
以上是关于指针本质分析的主要内容,如果未能解决你的问题,请参考以下文章