zoukankan      html  css  js  c++  java
  • 指针本质分析

    指针本质分析
    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 个 ==========
    主要记录的是学习听课的笔记
  • 相关阅读:
    九度 1172:哈夫曼树
    mac os 错误提示:下载失败 使用已购页面再试一次 解决方法
    WCF学习资料汇总
    豆瓣FM 歌词跟随插件
    大型网站架构和高并发的一些想法
    MAC OS 系统使用心得
    Windows 7 安装.net framework 4.0 失败,错误HRESULT 0xc8000222解决办法
    json官方学习档案
    转:查看sql语句执行时间/测试sql语句性能
    从数据库反向生成django的models
  • 原文地址:https://www.cnblogs.com/chengeputongren/p/12175832.html
Copyright © 2011-2022 走看看