一、地址和指针

程序在编译过程中,系统会根据变量类型分配一定长度的内存单元。内存区中的每个字节都有一个编号,该内存单元的初始编号就是变量的"地址/指针",该内存单元的长度就是变量的"大小/空间"

二、*p是什么

int a = 100; //定义一个整形变量a,并赋初值100
int *p = a; //定义一个指针变量p指向整型变量a

说明:

  1. p的类型:int *  地址类型,去除变量名剩下的就是变量的类型

  2. a的类型: int  那么a空间的地址类型 就是 int *

  3. 怎么看一个空间的地址类型?:就是在这个空间类型基础上加一个  *

  4. 空间a的地址的表示:&a

*p是什么?

  第一种阐述:

    *p就是 p指向的空间  *p就是a

  第二种阐述:(计算机寻址方式)

    1. 找到指针变量p中存放的地址(门牌号)即空间的位置

    2. 取空间大小(p指向的空间大小)

三、指针的用途

1. 表示复杂的数据结构。所有数据类型地址都是一样的

2. 能够动态分配内存

3. 方便地使用字符串

4. 有效地使用数组

5. 调用函数获得1个以上结果。C函数只有一个返回值

6. 可以跨栈操作其他空间。知道变量/空间的地址 那么就可以操作变量/空间,夸函数操作变量必须要传地址

四、野指针

野指针造成的问题:

1. 不可预料

2. 不安全 危险

如何避免这个问题:

1. 声明指针变量之后,一定要给指针变量赋一个合法的空间地址(合法空间:必须是当前程序申请的空间 int a; int * p = &a;//这个a就是一个合法空间)

2. 只要使用指针变量一定要给这个指针变量赋一个合法的空间地址,否则会造成段错误或者bus error

五、数组和指针

C语言规定:

  1. 数组名a是数组首元素地址

  2. &a是数组的整个空间的地址

  3. &a的类型就是:就是数组类型基础上 + *,数组类型只能 在中间加内容。a数组类型:int a[5];&a类型:int (*) [5]

例:int (*p)[5] = &a

  1. p 指向整个数组空间

  2. &a+1表示:加了一个数组空间,加了1*sizeof(int[5]) = 20字节

  3. a+1表示:加了1*sizeof(int) = 4

说明:

1. 要想操作数组的所有元素,那么必须操作数组的首元素地址

2. int * p = (int *)(&a+1);//(int *)强制类型转换,否则会报错

3. 指针万能公式 :p[i] <==> *(p+i)

六、各种数据类型和其指针类型

各种数据的指针类型:

1. int p 和 int * p

整型变量p;整型变量的整型指针

2. int a[5] 和 int * a[5] 和 int (*a) [5]

整型数组;(整型指针)数组;整型(数组指针)。

指向数组类型的指针,必须使用括号。如果没有括号,表示一个具有n个int类型指针的数组。

3. int f(void) 和 int * f(void) 和 int (*f) (void)

参数为void,返回值类型为int的函数f;返回指针的函数;

4. int * * p

指针的指针;这里的p可以指向 上面的 a,p,f 表示(&p,&a,&f)

C 碎片七 指针的更多相关文章

  1. IP 碎片重组

    IP 碎片重组 内核中的IP重组函数. struct sk_buff * ip_defrag(struct sk_buff * skb, u32 user) { ...... //如果内核范围超出限制 ...

  2. GO语言的进阶之路-go的程序结构以及包简介

    GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...

  3. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

  4. C++内存管理剖析

    C++内存管理 C++中有四种内存分配.释放方式: 最高级的是std::allocator,对应的释放方式是std::deallocate,可以自由设计来搭配任何容器:new/delete系列是C++ ...

  5. C和指针 (pointers on C)——第七章:函数(上)

    第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并非非常虐.关于stdarg宏可能有些陌生.它负责可变參数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函 ...

  6. Android学习之基础知识七—碎片的最佳实践

    一.Android碎片(Fragment)的最佳实践——简易版新闻应用 第一步:新建FragmentBestPractice项目,在app/build.gradle当中添加:RecyclerView ...

  7. 程序设计入门-C语言基础知识-翁恺-第七周:指针与字符串-详细笔记(七)

    目录 第七周:指针与字符串 7.1 指针初步 7.2 字符类型 7.3 字符串 7.3 课后练习 第七周:指针与字符串 7.1 指针初步 sizeof 是一个运算符,给出某个类型或变量在内存中所占据的 ...

  8. PHP的七个数组指针函数

    1. PHP的七个数组指针函数 函数 描述 reset() 将一个数组的内部指针重置到首位,并返回第一个元素的值 end() 将一个数组的内部指针移动到数组的最后一个元素所在的位置,并返回最后一个元素 ...

  9. C和指针 第七章 习题

    7.1 hermite递归函数 int hermite(int n, int x) { if (n <= 0) { return 1; } if (n == 1) { return 2 * x; ...

随机推荐

  1. python中报中文编码异常,Non-ASCII ,but no encoding declared

    异常信息: SyntaxError: Non-ASCII character '\xe5' in file a.py on line 9, but no encoding declared; see ...

  2. OpenXml 2.0 读取Excel

    Excel 单元格中的数据类型包括7种: Boolean.Date.Error.InlineString.Number.SharedString.String 读取源代码: List<strin ...

  3. javascript如何判断手机是什么系统

    做H5页面的时候,经常会用到判断手机是什么系统,根据系统的型号,实现不同的效果,那么如何判断显示页面的手机型号呢? (function(){ var isMobile={ Android:functi ...

  4. SQL 时间及字符串操作

    都是一些很基础很常用的,在这里记录一下 获取年月日: year(时间) ---获取年,2014 month(时间) ----获取月,5 day(时间) -----获取天,6 如果月份或日期不足两位数, ...

  5. vue的安装配置

    1.访问vue的官网: https://cn.vuejs.org/v2/guide/installation.html安装配置 2.安装淘宝镜像项目搭建 .安装node  到官网下载安装.  (中)h ...

  6. hive-0.12.0-cdh5.1.0安装

    先前条件: 要先安装好MYSQL 下载:hive-0.12.0-cdh5.1.0.tar.gz,并解压到安装目录 1. 添加环境变量 修改/etc/profile文件. #vi /etc/profil ...

  7. GC偏好的校正与偏好程度的评估

    在二代测序仪上测出的数据,通常都会表现出测序深度与GC 含量的相关性,称为GC bias. GC bias校正 为了后续生物信息分析更加准确,通常需要做GC bias的校正. 2010 年 steve ...

  8. Entity Framework Code-First(5):Code First Conventions

    Code First Conventions: We have seen how EF Code-First creates DB tables from domain classes in the ...

  9. hdu1077

    #include<iostream> #include<cmath> using namespace std; struct Point { double x,y; }; do ...

  10. Window Live Writer在Win7下安装提示错误“OnCatalogResult:0x80190194”

    1.在C:\Users\All Users\Microsoft\WLSetup\Logs下(All Users默认是隐藏文件夹),有两个Window Live的安装日记记录文件,打开第一个找到ERRO ...