指针本质分析
指针本质分析
- 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?
 - 可以通过指针改变另一个变量的值
 - 指针的本质为变量(只要是变量,就有地址),不过说这种变量很特殊,它存储的是变量的地址值
 - 在指针声明时,*号表示所声明的变量为指针
 - 在指针使用时,*号表示取指针所指向的内存空间的值
 - *号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值
 - 不同的指针,所占用的内存是一样的。所有的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 个 ==========
相关推荐
  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