第8章:指针-指针变量的定义、初始化及解引用(基于哈工MOOC)

来源:互联网 发布:sql server没有002 编辑:程序博客网 时间:2024/05/21 11:30

第8章 指针 ——指针变量的定义、初始化及解引用

指针前补充的知识:

*1,内存如何编址
内存中的每个字节都有唯一的编号(地址)
内存地址按字节编号,其字长一般与主机相同 32位机使用32位地址,最多支持2的32次方字节内存(4G)
*2,什么是地址
地址是一个无符号整数,从0开始, 依次递增。在表达和交流时,通 常把地址写成十六进制数


 变量的寻址方式
#1,直接到变量名标识的存储单元读取变量的值——直接寻址

#2,通过其他变量间接找到变量的地址读取变量的值——间接寻址
用什么类型的变量来存放变量的地址?
指针(Pointer)类型
指针变量——具有指针类型的变量
*保存32位地址值——sizeof(pa)是4个字节
*用什么数据类型去理解它所指向的存储单元中的数据呢?

int *pa;int *pa = &a;int a = 1;pa = &a;

指针变量指向的数据类型,称为基类型
指针变量的内容:&a

使用%p格式符显示变量的地址

#include <stdio.h>int main(){   int  a = 0;    int *pa;    printf("a=%d\n", a);    printf("&a=%p\n", &a);    printf("pa=%p\n", pa);}   return 0;

输出:这里写图片描述

指针变量只能指向同一基类型的变量

**也就是说指向相同的数据类型

指针变量使用之前必须初始化

**若你不知把它指向哪里,那就指向NULL(在stdio.h中定义为0)

补充:

1,NULL是什么?

 空指针——值为NULL的指针,即无效指针

问题:

 问题:p = 0 和 p = NULL 有什么区别吗?

 p = NULL可以明确地说明p是指针变量,而不是一个数值型变量

 问题:空指针就是指向地址为0的存储单元的指针吗?

 答案:不一定

* 并非所有编译器都使用0地址
 某些编译器为空指针使用不存在的内存地址*

2,如何访问指针变量指向的存储单元中的数据?

 通过间接寻址运算符访问(引用)指针变量指向的变量的值

 ——指针的解引用(Pointer Dereference)

#include<stdio.h>int main(){    int a =0;    int *pa = &a;    *pa = 1;    printf("a= %d\n",a);         printf("*pa= %d\n",*pa);        return 0;    }

这里写图片描述

3,指针变量的定义和初始化

#include <stdio.h>int main(){int  a = 0, b = 1;int *pa, *pb;pa = &a;pb = &b;printf("a=%d, b=%d\n", a, b);printf("*pa=%d, *pb=%d\n", *pa, *pb);return 0;}

注意:不能写成:int* pa, pb;