指针及地址笔记

来源:互联网 发布:mac 单独调节应用声音 编辑:程序博客网 时间:2024/06/05 18:04
1.什么是地址
生活中的地址.
内存地址:
地址与内存单元中的数据是两个完全不同的概念
地址如同房间编号
内存单元如同房间
内存单元中存放着数据

变量地址:
系统分配给"变量"的"内存单元"的起始地址
如:
char c = 'a'; // 占用1个字节
那么变量c的地址为:0x10A5

int n = 250; // 占用4个字节
那么变量c的地址为:0x10A1

2.什么是指针
在计算机中所有数据都存储在内存单元中,而每个内存单元都有一个对应的地址, 只要通过这个地址就能找到对应单元中存储的数据. 由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”

内存单元的指针(地址)和内存单元的内容是两个不同的概念。
3.什么是指针变量
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
严格意义上说,指针是一个地址,是一个常量
针变量是存放一个地址,是一个变量。
4.定义指针变量的格式
指针变量的定义包括两个内容:
指针类型说明,即定义变量为一个指针变量;
指针变量名;
其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。

- 示例
char *p; // 一个用于指向字符形变量的指针
int *q; // 一个用于指向整形变量的指针
long *t; // 一个用于指向长整形变量的指针
float *r; // 一个用于指向单精度浮点形变量的指针
double *s; // 一个用于指向双精度浮点形变量的指针
```
注意
1)在定义指针时,“*”号表示定义的变量是指针变量,变量的值只能存放地址。
2)一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。
3)指针也可以被声明为全局、静态局部和局部的。


5.指针变量的初始化方法
指针变量初始化的方法有两种:定义的同时进行初始化和先定义后初始化

定义的同时进行初始化
int a = 5;
int *p = &a;

先定义后初始化
int a = 5;
int *p;
p=&a;

把指针初始化为NULL
int *p=NULL;
int *q=0;

不合法的初始化:
指针变量不能被赋值一个整数值(因为我们不知道这个整形常量是内存哪块地址
int *p;
p =  250; // 错误写法
被赋值的指针变量前不能再加“*”
int *p;
*p=&a; //错误写法

注意:
多个指针变量可以指向同一个地址
指针的指向是可以改变的
int a = 5;
int *p = &a;
int b = 10;
p = &b; // 修改指针指向
指针没有初始化里面是一个垃圾值,这时候我们这是一个野指针
野指针可能会导致程序崩溃
野指针访问你不该访问数据
所以指针必须初始化才可以访问其所指向存储区域


0 0
原创粉丝点击