您的位置:首页 > 编程语言 > C语言/C++

C语言学习:指针(笔记)

2016-09-15 22:41 441 查看
1、C程序设计中使用指针的好处:

使程序简洁、紧凑、高效;

有效地表示复杂的数据结构;

动态分配内存;

得到多于一个的函数返回值。

2、内存中每个字节都有自己唯一的编号————内存地址;

在程序中声明一个变量,如int

i;在程序被编译或者函数被调用时,为这个变量分配相应的内存单元,即分配多少个字节的长度的内存单元。变量就是对程序中数据存储空间的抽象。

换句话说———内存相当于高楼大厦,每个房间(相当于内存单元)都有自己唯一的门牌号(即内存地址)。现在根据需要将1-4号房间,分配给大山使用,则这1-4号房间就叫做大山的房间,相当于int i;中的i ,而为i分配的内存单元由操作系统决定大小,木有操作系统,就由处理器决定。

3、存储单元、内存地址及指针

指针就是储存单元的地址。

一个变量的指针就是该变量在内存中的存储单元的地址。

存取变量中的数据有两种引用方式:

直接引用:按变量名称存取变量的值。

间接引用:将其变量的指针即该变量的内存地址,放在另一个新的变量中,则现在这个新的变量中存储的值就是原来变量的内存地址值,现在对新变量进行操作,就相当于根据原变量内存地址,对原变量进行存取操作!


4、指针变量

指针:一个内存的地址。直接就是内存地址

指针变量:专门存放地址的变量。将变量的内存地址存入指针变量,则该指针变量的地址即指针就直接指向原变量的值。

4.1 变量的指针和指向变量的指针变量

变量的指针:就是变量的内存地址

指向变量的指针变量:就是存放变量内存地址的变量。

其中,用*表示指针变量所指向的对象。

如:指针变量pa指向变量a。则*pa就表示pa的对象,即变量a。(此时*pa与a为同一个变量)

指针:就是变量的地址。

指针变量:是可以存放指针的变量。

指针类型:由变量的类型决定。

例:指针变量pa指向变量a,即表示变量pa中存放着变量a的内存地址。

若 pa = &a; 则此时 *pa 与 a 是等价的。

4.2 指针变量的定义与初始化

4.2.1. 指针变量的定义

一般形式:数据类型 *指针名;

例:

int *p1,*p2;
float   *q ;
static  char  *name;
/*
注意:
1、int *p1,p2与 int *p1,p2不同,每个指针变量前都有一个*;
2、指针变量名是p1,p2,不是*p1,*p2;
3、指针变量只能指向定义时所规定类型的变量;int *p,a; char c; float x;  p只能指向a,不能指向c或x。
*/


4.2.2 指针变量的初始化

一般形式: 数据类型 *指针名=初始地址值;

int i;
int *p = &i;//注意:变量i必须在定义该指针*p变量前,已经定义,并且指针变量类型与变量i的类型一致


int i;
int *p=&i;
int *q=p;//可以用已经初始化过的指针变量作初值。


int i;
static int *p=&i;//这是错误的,不能用auto变量的地址去初始化static型指针


4.2.3 指针变量的引用

i_pointer—–指针变量,它的内容是地址量

*i_pointer—-指针的目标变量,它的内容是数据

&i_pointer—指针变量占用内存的地址

5、指针与函数

5.1 指针作为函数的参数 ——-地址传递

好处:共享内存,“双向”传递

传地址的特点:

实参可以是变量、常量或表达式,其实参值是指针数据类型。

在被调用函数中,可以通过地址间接访问主调函数中的变量,而达到改变主调函数的变量值。

6、指针与一维数组

[] 变址运算符

a[i]  *(a+i)

即 a[0] <=> *a

·········

a[5] <=> *(a+5)

7、关于数组名作为函数参数

数组名作为函数的参数,实质上是指针作为函数的参数

数组名作为函数参数,实参与形参的对应关系

实参是数组名或指针变量,对应的形参可以是数组名或指针变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针 函数