16、指针

指针是C语言编程灵魂,但是也不要神话它,掌握住指针的实质很重要。

1、指针地址空间

指针:指针变量 用来存储内存地址编号。

地址:内存会按照字节进行编号,一个字节就有一个编号。

一般地址表示用十六进制 ,查看地址用%p

空间:指针本身的空间 和 指针指向的空间

cpp 复制代码
int a;						
int * p;
p = &a; 

指针指向谁就保存谁的地址,保存谁的地址就指向谁。

2、指针定义

指针是变量,也要遵循先定义在使用的原则,定义和变量的定义类似。

格式:

指向对象的数据类型 * 指针名;

指针对象的数据类型:学过的数据类型都可以,具体看需求

*:代表指针的标记

指针名: 自定义 p q t k head tail h

例子:

定义一个指针指向int型的变量: int * p;

定义一个指针指向char型空间: char * q;

定以一个指针指向 int [3]的空间:int (*q)[3];

3、指针赋值

指针使用前必须有明确的指向,也就是要有合法的地址值。

什么类型的指针存储什么类型的地址,但是对于指针变量来说存储的是地址值即可,因此也可以将地址强转赋值给不同类型的指针。

cpp 复制代码
// 先通过变量的形式拿到地址编号
int a = 10;  // &a	
int b = 20;  // &b	
	
// 让指针指向空间a
p = &a;    // *p就是a	
*p = 15;   // a == 15

p = &b;   // *p就是b,  对p赋值就改变了p的指向
*p = 35;   // b = 35;

char * q = (char *)&a;
// *q就是a的第一个字节的空间

4、指针操作指向的空间

表示:*指针名

后续操作需要看 类型决定后续操作。

int * p = 地址; *p是int型按int型操作

char *p = 地址; *p是char型按char型操作

struct book* 盘= 地址,*p是struct book 结构体类型,按结构体操作

5、指针本身空间

表示:指针名

操作的时候可能会改变指针的指向

指针本身空间大小和系统有关,32位--4个字节 , 64位 -- 8个字节

指针变量空间只存地址编号,能够存储地址编号即可,与指向对象类型无关。

6、指针偏移

前提:指针有明确的指向,

指针偏移和指针指向对象类型有关,以它为单位进行偏移。

指针指向对象类型 从 指针的定义 上看。

cpp 复制代码
char ch = 'a';
int b = 30;		
double d;		

char *p = &ch;		
int *q = &b;		
double *t = &d;
		
printf("%p %p %p\n",p,q,t);
printf("%p %p %p\n",p+1,q+1,t+1);

指针偏移偏移一般用于连续的空间 --- 数组、动态内存申请

cpp 复制代码
int arr[] = {5,29,30,57,8,49,20};			
int *p = arr;    // 等价于  p = &a[0]

printf("%d",*(p+0));   // arr[0]   在这里*解地址的意思
printf("%d",*(p+1));   // arr[0]   在这里*解地址的意思
相关推荐
LuckyLay6 天前
Golang学习笔记_11——指针
笔记·学习·golang·指针
物联网牛七七15 天前
24、宏定义和条件编译
条件编译·宏定义·c语言学习笔记
三月微暖寻春笋16 天前
【和春笋一起学C++】OpenCV中数组和指针运用实例
opencv·指针·数组·二值化·遍历像素
沃和莱特1 个月前
C++中类的继承
数据库·c++·编程·c·指针·友元函数
—Miss. Z—1 个月前
C语言中用指针输入字符串
c语言·字符串·指针
桃酥4031 个月前
day13|C++重难点之 静态变量、全局变量、局部变量的区别,在内存上是怎么分布的、指针和引用的区别、C++内存分区
c++·指针·引用·内存分区·静态变量
TYYJ-洪伟2 个月前
Rust 程序设计语言学习——高级特性
rust··指针·函数指针·闭包·不安全
2401_858286112 个月前
E43.【C语言】练习:传址调用
c语言·开发语言·指针
每天都要写算法(努力版)2 个月前
关于this指针
算法·指针·this