C语言--指针的使用
2015-10-20 21:18
246 查看
一、地址和指针的概念
1、地址(1)计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节)。为了方便管理, 必 须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的地址。
内存地址──内存中存储单元的编号。
(2)在地址所标识的存储单元中存放数据。
注意:
内存单元的地址与内存单元中的数据是两个完全不同的概念。
变量地址──系统分配给变量的内存单元的起始地址。
2、指针的概念
在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单 元,不同的数据类型所占用的内存单元数不等,如整型量占4个单元,字符量占1个单元等,为了 正确地访问这些内存单元,必须为每个内存单元编上号。
根据一个内存单元的编号即可准确地 找 到该内存单元。 内存单元的编号也叫做指针。既然根据内存单元的编号或地址就可以找到 所需的内存单元,所以通畅也把这个地址称为指针。
内存单元的指针和内存单元的内容是两个不同的概念。
总结:对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的
二、指针变量
1、指针变量的概念在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
注意:
严格意义上说,指针是一个地址,是一个常量。
指针变量是存放一个地址,是一个变量。
2、定义一个指针变量
指针变量的定义包括三个内容:
(1)指针类型说明,即定义变量为一个指针变量;
(2)指针变量名;
(3)变量值(指针);
一般形式为:
//类型说明符 *变量名;
*表示这是一个指针变量;
变量名即为定义的指针变量名;
类型说明符表示本指针变量所指 向的变量的数据类型。
//定义int类型的指针变量 //定义了一个指针变量,变量名是p1 //int表示,p1只能存放一个int类型的变量的地址 int *p1; //定义char类型的指针变量 //定义了一个指针变量,变量名是p2 //char表示,p2只能存放一个char类型的变量的地址 char *p2; //定义double类型的指针变量 double *p3; //定义float类型的指针变量 float *p4; //定义void类型的指针变量 void *p5;
注意:
(1)在定义指针时,“*”号表示定义的变量是指针变量,变量的值只能存放地址。
(2)一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。
(3)指针也可以被声明为全局、静态局部和局部的。
3、指针变量的初始化和引用
(1)定义的同时进行初始化
int *p = &a; //用a的地址初始化 p这个指针变量 //p指向了a int *p1 = &a,*p2 = &a; //p1 p2都指向了a //部分初始化 //定义了两个指针变量 p3 p4 int *p3 = &b,*p4; p4 = &b;
(2)先定义后初始化
int *p7; p7 = NULL;
(3)把指针初始化为 NULL
int *p5 = NULL; //NULL 是空(0) int *p6 = 0; //空
(4)不合法的初始化
①指针变量不能被赋值一个整数值,因为我们不知道这个整形常量是内存哪块地址,如:
int *p; p = 1000;
②被赋值的指针变量前不能再加“*”说明符,如:
*p = &a;//错误写法
相关文章推荐
- c++11 宽字节与窄字节的相互转换
- c++笔记
- 【转】变量的声明和定义,从C到编译原理到C++,再到Java
- c++ 编译报错:不允许指针指向不完整的类
- C/C++用动态链表实现对学生信息的存储
- 一元二次方程的求解
- 折半查找法
- C语言——伸缩型数组成员
- 第六周项目1 建立顺序栈算法库
- char **不能转化为 const char **; Base **不能转化为 Derive **
- 找出N内的完数,并按一定格式输出
- iOS开发之c语言基础-函数指针
- ios开发之c语言基础-高级指针题目
- iOS开发之c语言基础-动态内存分配与管理题目
- iOS开发之c语言基础-动态内存分配与管理
- iOS开发之c语言基础-高级指针
- ios开发之c语言基础-结构体经典题目
- ios开发之c语言基础-指针
- 爬爬爬之路:C语言(九) 结构体指针与预编译指令
- c++数组访问越界的问题