指针本质分析

Posted chengeputongren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针本质分析相关的知识,希望对你有一定的参考价值。

指针本质分析
  1. 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?
  2. 可以通过指针改变另一个变量的值
  3. 指针的本质为变量(只要是变量,就有地址),不过说这种变量很特殊,它存储的是变量的地址值
  4. 在指针声明时,*号表示所声明的变量为指针
  5. 在指针使用时,*号表示取指针所指向的内存空间的值
  6. *号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值
  7. 不同的指针,所占用的内存是一样的。所有的32位系统中,指针所占用的的字节是4
传值调用与传址调用
  1. 指针是变量,因此可以声明指针参数
  2. 当一个函数体内部需要改变实参的值时,需要使用指针参数
  3. 函数调用时,实参值将复制到形参
  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 个 ==========

以上是关于指针本质分析的主要内容,如果未能解决你的问题,请参考以下文章

指针的本质分析

指针的本质分析

Objective-C Block与函数指针比较

引用的本质分析

第5课.引用的本质分析

C++ - 指针和“智能指针”