码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学习——指针

时间:2015-11-03 09:13:50      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

指针

在学习指针之前,首先应该了解一些东西:

内存是什么?

  从硬件形态上说,内存就是一条形物理设备,从功能上讲,内存是一个数据仓库,程序内在执行前都要被装载到内存中,才能被中央处理器执行。内存是由按顺序编号的一系列存储单元组成的,在内存中,每个存储单元都由唯一的地址,通过地址可以方便地在内存单元中存储信息。在计算机中,一切信息都是以二进制数据的形式体现的,每个内存单元的容量是1B,即8bit(8个0、1二进制位)。

1、取地址运算符&, 间接运算符*

  &运算符:  取地址运算符,&m即是变量m在内存中的实际地址。

  *运算符: 指针运算符 (通常称为间接引用运算符),它返回其操作数 (即一个指针)所指向的对象的值.

  int num = 10;

  printf("%d , %x", num, &num);

  *(&num) = 100;

  printf("%d , %x", num, &num);

  &num  是直接访问变量num的地址,而 *(&num)中*则是间接访问

  直接访问:  按变量地址存取变量值。

  间接访问:  通过存放变量地址的变量去访问变量。

2、指针变量的声明与初始化

  在声明一个指针后,编译器并不会自动完成其初始化,此时,指针的值是不确定的,也就是说,该指针指向那块内存单元是完全随机的。

  如果在指针变量声明之初确实不知道该将此指针指向何处,最简单的方式是将其置“0”,C语言中提供了关键字NULL

其基本形式为:

  类型* 指针变量名;

  int   *pNum=NULL;

  值为NULL的指针称为空指针,这意味着,指针并不指向任何地址。在头文件 stdio.h 中,NULL 定义为常量。

3、指针变量在使用之前必须进行初始化。因为指针未初始化,指向一个随机的地址,很有可能是其他程序正在使用的内存地址,如果去修改它,就会导致程序崩溃。

  int  num=100;

  int   * p;

  p = num;    //这样是错误的,可以编译,运行报错,会把100当做一个地址

  p = #  //正确

4、指针只是一个地址,大小是固定的,就是四个字节。

 int  *p1;

double  *p2;

char  *p3;  

sizeof(p1);   //结果为 4

sizeof(p2);   //结果为4

sizeof(p3);   //结果为4

 

5、 指针和地址的区别

两个要点:一、指针是个量,对应着一块内存区域,二,指针存储的信息是某个内存单元的地址。

比如:  int num=10;

          int   *p=# 

      &num 是一个地址,是一个常量

      而p是一个指针变量,可以存储一个地址

  比如300500是一个地址,

  int  *p=(int *)300500 是一个指针,p存储的是地址,指针有类型,从哪里开始,长度是多少,从哪里结束,得知了类型以后,就知道这片内存数据是如何解析

 

C语言学习——指针

标签:

原文地址:http://www.cnblogs.com/Sandglass/p/4932112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!