1、什么是地址?

内存是由若干个1个字节的内存单元组成的存储器

计算机为了管理内存单元。给每一个字节都进行编号

编号的就是地址

2、什么是指针?

地址就是指针

地址:

地址指向的内存单元值:编号相应的存储内容

变量訪问的方法:直接訪问   
间接訪问

1)直接訪问:用变量名訪问其代表的存储空间

2)间接訪问:通过内存地址訪问地址所相应的存储单元的内容

3、指针和变量之间的关系

指针能够间接的訪问变量的值

1)指针变量:就是用来存放地址的变量

指针变量也遵守变量使用的规则
:先定义  --->初始化 -->使用

2)怎样定义一个指针变量

数据类型*
指针变量名;

int *p;

//变量名 p

//int表示什么意思?
表示指针变量仅仅能存放一个整型数据的地址

//* 什么意思?    int p;//普通的整型变量,int *p;//指针变量

3)指针变量初始化

为什么要进行初始化?

首先,假设普通的一个变量没有初始化,会有什么后果?  //垃圾值

对于指针变量。int *p;   //p
随机的。p 0xff1111  10

*p = 10; //假设不初始化直接使用。可能会导致系统崩溃

野指针:定义之后,没有初始化

(1)定义的同一时候进行初始化

int *p=NULL;   //赋值为NULL ,表示谁都不指

int *p1 = 0;   //同上

int a=10;

int *p2=&a;

int *p3=&a;

int *p4 = p2;

p3 = p4;    //指针的指向能够改变

(2)先定义。后出初始化

int *p;

p = NULL;

int *p1;

p1=&a;

注意:

1)多个指针能够指向同一个变量

2)指针的指向是能够改变的

3) int *p;   p = 100;//错误的
存放的时地址,如今给的时整数值

4)*p = &a;错误  //*p是整型的变量。仅仅能赋值数值

3)使用指针变量间接的訪问变量值

int *p = &a;

*p  就是訪问p中存放的地址代表的存储空间的值

p指向的存储空间的值

4、指针的应用场景

1)在被调函数中,改动主调函数的变量值

2)能够让函数有多个返回值

5、指针变量为什么要区分类型

前提:不同类型的指针变量在内存中占用8个字节

为什么都占用8个字节还要区分类型呢?

char *c;  //c存放的时地址   *c
从c存放的地址開始
,连续取1个字节

int *p;                   *p 从p存放的地址開始
,连续取4个字节

int a=10;

char *c2 = &a;    //从变量a的首地址開始。取了1个字节(实际4个,取少了)

double *d1 = &a;  //从变量a的首地址開始,取了8个字节(实际4个,取多了)

6、多级指针介绍

二级及以上的指针

一级:指针指向的是一个基本数据类型变量的地址

二级:指向的又是一个地址

int a = 10;

int *p = &a;   //p是一级

int **p1 = &p;  //p1 ---> p    p1是二级

7、指针和数组之间的关系

1)数组指针:

指向数组元素的指针变量

int a[5];    //a[0]  a[1] 直接訪问

目标:用地址也能够訪问数组元素

(1)数组名訪问

a存放的是数组的首地址(常量)   == &a[0]

*a     ==   a[0]元素的值

a+1   指向数组的下一个元素

a-1   指向数组的上一个元素

*a+1   ==  a[0]+1;

*(a+1) ==  a[1]元素的值

int *p; //指针变量

p = a;  //p指向了数组a的第一个元素

p = &a[0];

p+1 指向数组的下一个元素

p-1 指向数组的上一个元素

*p  ==   a[0]元素的值

*p+1   ==  a[0]+1;

*(p+1) ==  a[1]元素的值

p = p+1;   //p移动到了下一个元素

p++;

*p++  == *(p++) == *(p = p+1)

2)指针数组:

指针数组:数组的每个元素都是一个指针

int a[2][3]={1,2,3,4,5,6};    // a[0]  1,2,3    a[1] 4,5,6

int *pa[]={a[0],a[1]};

printf("%d\n",**(pa+1));    //4

版权声明:本文博主原创文章。博客,未经同意不得转载。

【C疯狂的教材】(九)C语言指针(一)的更多相关文章

  1. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  2. C语言指针【转】

    一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细 ...

  3. 2-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 前面我们对于: c语言的基本用法 makeFile文件的使用 main函数的详解 标准输入输出流以及错误流管道 工具与原理 指针与内存都是c语言中的要点与难点 指针 数组 ...

  4. C语言指针学习总结

    上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂. 最近在重温数据结构的内容,因为大多数据结构的教材都是用C语言描述的,而数据结构中也大量的用到了指针的内容,所以我就在这篇笔记中 ...

  5. C语言指针专题——指针难学的4点原因

    前一篇跟大家聊了聊指针的概念,可是就算了解了指针是什么,为什么依然感觉难学?我试着从几个点切入,聊聊指针难学之处. 文末会给大家推荐几本书,有需要的朋友可以看看! 难点1. 讨厌的星号 定义指针变量p ...

  6. 难搞的C语言指针你搞懂了多少

    C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...

  7. 最容易出错的C语言指针

    C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...

  8. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  9. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  10. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

随机推荐

  1. Jquery-uploadify多文件上传插件使用介绍

    Jquery-uploadify多文件上传插件使用起来非常的给力,在此记录一下使用方法. query-uploadify插件的属性设置 <script src="JS/jquery.m ...

  2. DataTables 配置和使用

    WEB后台开发,如果用的是Bootstrap框架,那这个表格神器你一定不要错过. 官方地址:https://datatables.net/ What?英文不好,没关系咱有中文的 http://data ...

  3. Linux中的小程序—— 进度条

    在说正事之前,首先科普一下在什么是回车什么是换行? 我们通常所说的回车就是从一行的末尾跳到另一行的开头,但事实上这却是由回车和换行两个动作所完成的,也就是键盘上<enter>所完成的工作. ...

  4. Cortex-mo指令集

    处理器使用的是ARMv6-M Thumb指令集,包括大量的32位的使用Thumb-2技术的指令.表7-22列出了Cortex-M0指令和它们的周期数.周期计数以零等待状态的系统为基准. 表7-22  ...

  5. SQL通用函数-nvl-nvl2 -nvlif-nullif-coalesce-decode-case

    通用函数适用于任何类型数据(包括空值),一般用于实现空值处理.条件运算和多路分支结果,下面介绍其中常用的几种: nvl(exp1, exp2) 函数nvl(exp1, exp2)用于将空值转换为指定的 ...

  6. ValidateBox( 验证框) 组件

    本节课重点了解 EasyUI 中 ValidateBox(验证框)组件的使用方法,这个组件依赖于Tooltip(提示框)组件. 一. 加载方式//class 加载方式<input id=&quo ...

  7. javascript sort 用法

    <html> <head> <title></title> <script type="text/javascript" sr ...

  8. linux下登录出现-bash-3.2#解决办法

    1:下载 安装 csh yum  install csh   2:再切换即可  

  9. Mysql的Error 1364

    在安装mysql 5.5.8的最后一步,应用安全配置时, 弹出错误对话框, Error Nr.1364 authentication_string 解决办法: 1.暂时不要关闭该窗口,cmd命令,执行 ...

  10. c# 与 c++ 编译

    C#的所有方法封装在类中,类的方法没有先后之分,无需声明.//而C++必须在函数调用前,由编译器检查参数类型是否合法,所以必须知道函数的原形(protype),所以必须提前声明函数的签名(signat ...