学习目标:
快速掌握指针
学习内容:
变量的地址
1内存是以通过字节为单位进行编制的,内存中的每个字节都对应一个地址,通过地址才能找到每个字节
2变量对应内存中的一个储存单元,该储存单元占用一定的字节数,用着储存单元的第一个字节的地址表示变量的地址。
指针
1,变量的地址称为指针
2,指针是一个地址
指针变量
1,用于存储指针的变量成为指针地址
2,指针变量用于存储变量的地址(及指针)
指针的定义
类型说明符 *指针变量名;
类型说明符表示本指针所指向的变量的数据类型
*为指针运算符号
- 根据指针指向类型的不同 可分为三种类型
* int *p1; //指针指向整型变量
* float *p2; //指针指向浮点型变量
* char *p3; //指针指向字符型变量
指针变量的大小
无论指向整型int 字符型char 浮点形 float 都为8个字节
因为指针传递的是地址所及仅仅保存目标地址即可
同时因为构架不同 有的指针为4字节
以下为测试指针占用字节大小实例
#include <stdio.h>
int main(void)
{
int a = 10;
/*定义之指针变量p1(也可说成定义指针p1),
指针指向一个整型变量 */
int *p1 = &a;
char ch = 'c';
/*定义一个指针p2,指针指向一个字符型变量 */
char *p2 = &ch;
//指针变量占有内存的空间大小
printf("p1=>size:%d p2=>size:%d\n",sizeof(p1),sizeof(p2)) ;
return 0;
}
如何获取指针指向变量的值呢?
一个指针*p1
如果指针p1指向一个变量 int a
在指针前加 * 即可获取指针变量的值(即 获取指针所指向的存储单元的值)
//直接访问
printf("a:%d ch:%d", a, ch);
//间接访问
printf("a:%d ch:%d",*p1, *p2) ;
查阅之后可知
通过直接访问字符型变量的方式,可以直接获取变量存储单元的第一个字节的值,而通过指针间接访问字符型变量的方式,可以获取指针指向的内存地址中的内容。这两种方式在输出字符型变量的值时会有不同的结果。
当通过直接访问字符型变量取内容时,会输出该变量存储单元的第一个字节的十进制值或ASCII码对应的字符。例如,字符型变量x的值为’A’,通过直接访问x的方式输出时,会得到65,这是’A’的ASCII码值。
而当通过指针间接访问字符型变量取内容时,会输出指针指向的内存地址中存储的内容,该内容可能是字符型变量的值,也可能是其他数据类型的值。例如,如果有一个指针p指向字符型变量x,通过指针p访问x的方式输出时,会得到x的值。
因此,直接访问和通过指针间接访问字符型变量取内容的输出结果可能不同,这取决于字符型变量存储单元中的值以及指针指向的内存地址中存储的内容。
直接修改和间接修改
直接修改;直接对变量值进行修改,及直接写入相应内存空间
间接修改;首先通过指针指向目标存储空间,在对目标存储空间进行修改。
以下程序中要注意的是 当 *p1 出现在= 左侧时 及代表左值 含义为某储存空间
*p1 单独出现时 代表的是 指针变量 p1 所指向的值。
//直接访问修改
a = 20;
ch = 'b';
printf("a:%d ch;%c\n",a , ch);
//间接修改访问
*p1 = 30;
*p2 = 'A';
printf("a:%d ch:%c\n",*p1, *p2);
指针的初始化
指针变量 = null
代表指针为0 , 及指针不指向任何变量 。为空指针
指针定义后不进行初始化 指针将会随机指向一处地址 。为野指针
定义一个指针为 *int 那么 这个指针仅能指向 int 变量不能够指向其他类型变量。+
学习产出:
初识指针 了解指针的初始化 指针变量 指针的取地址,取内容 指针的基础概念