指针本质分析
指针本质分析
- 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?
- 可以通过指针改变另一个变量的值
- 指针的本质为变量(只要是变量,就有地址),不过说这种变量很特殊,它存储的是变量的地址值
- 在指针声明时,*号表示所声明的变量为指针
- 在指针使用时,*号表示取指针所指向的内存空间的值
- *号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值
- 不同的指针,所占用的内存是一样的。所有的32位系统中,指针所占用的的字节是4
传值调用与传址调用
- 指针是变量,因此可以声明指针参数
- 当一个函数体内部需要改变实参的值时,需要使用指针参数
- 函数调用时,实参值将复制到形参
- 指针适合复杂数据类型的函数参数中
常量与指针
const int*p; //p可变,p指向的内容不可变 int const*p; //p可变,p指向的内容不可变 int* const p; //p不可变,p指向的内容可变 const int* const p; //p和p所指向的内容都不可变
口诀:左数右指,当const出现在*号左边时指针指向的数据为常量,当const出现在*号右边时指针本身为常量
#include <stdio.h> int main() { int i = 0; const int *p1 = &i; int const *p2 = &i; int* const p3 = &i; const int * const p4 = &i; p1 = NULL; //ok *p1 = 1; //error p2 = NULL; //ok *p2 = 1; //error p3 = NULL; //error *p3 = 1; //ok p4 = NULL; //error *p4 = 1; //error return 0; }
运行结果:
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 个 ==========
相关推荐
拉斯厄尔高福 2020-10-19
csdnyasin 2020-06-28
penkgao 2020-06-13
qscool 2020-06-12
fengjing81 2020-06-06
AaronPlay 2020-06-02
lynjay 2020-06-02
twater000 2020-05-29
徐建岗网络管理 2020-05-13
qingsongzdq 2020-05-07
jeonkc 2020-05-06
lynjay 2020-05-03
徐建岗网络管理 2020-05-03
shangs00 2020-04-27
xuguiyi00 2020-04-22
qscool 2020-04-18
GoatSucker 2020-04-11