IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 指针(C语言) -> 正文阅读

[C++知识库]指针(C语言)

指针是什么
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int占用4个字节,char占 用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号一样,每个字节的编号是唯一的,根据编号找到某个字节。我们将内存中字节的编号称为地址(Address)或指针(Pointer)。地址从0开始依次增加,对于32位环境,程序能够使用的内存为4GB。 最小的地址为 0x0000 0000,最大的地址为 0XFFFF FFFF(16进制)。

int main(){
int a=1,b=2;
int z=a*b;  **//此处*为乘号**  表示乘法
int *p=&a;  **//此处为声明指针**  定义指针变量,和普通变量区分开
*p=10**//此处为解引用**   获取指针指向的数据,也可通过解引用重新赋值(间接操作)
}

一、指针的定义

指针的定义与普通变量的定义很类似,不过要在变量名前加上 * ,便于区分,格式为 datatype *name
或者 datatype *name,*表示这是个指针变量,datatype是指针所指向数据的类型

 int main{
 int a=1,b=2;
 int *s=&a;  //定义指针变量
 int *p=NULL; p=&b;  //定义指针变量
 }

指针的大小:只跟平台有关,和定义指针的类型无关,在32位平台是四个字节,在64位平台是八个字节

空指针和野指针

int *p;//野指针
int *q=NULL//空指针

空指针和野指针都可能会导致程序崩溃

利用 typedef 定义指针

typedef int* Point_32;
typedef long long * Point_64;
int main() {
	int a,*b;//a为整形变量,b为指针
	Point_32 c,  d;//c,d都为指针
}

二、指针的应用

void DataExchange(int a, int b) {
	int t = a;
	a = b;
	b = t;
}
int main() {
	int a = 10, b = 20;
	DataExchange(a, b);
	printf("a:%d b:%d", a, b);
}
//运行结果: a:10 b:20

我们希望a,b进行交换,但此时通过上面函数调用a,b值并未发生变化
形参变换,而实参并未发生改变

void DataExchange(int *p, int *q) {
	int t = *p;
	*p = *q;
	*q = t;
}
int main() {
	int a = 10, b = 20;
	DataExchange(&a, &b);
	printf("a:%d b:%d", a, b);
}
//运行结果: a:20 b:10

通过指针交换,a,b的值发生交换

三、指针的运算

1、指针 ± 整形
2、指针 + 指针(不可以)
3、指针 - 指针 (结果为整形)

指针的类型不同,加1的作用也不同
typename *p;
p=p+1;被编译器解释为:p=p+sizeof(typename)*1;
指针和整形加减后的结果仍然是指针类型
指针的强制转换

int main() {
	int num = 0x12345678;
	int *p = #
	char* q = (char*)p;//强制转换
	printf("%x", *q);
}
\\运行结果为 78  

四、指针与数组的关系 函数指针

数组指针

一个指向数组的指针

typedef int (*Arr_Point)[4];
int main() {
	int brr[3][4];
	int(*p)[4] = brr;  //  也可写为 int (*p)[4]=&brr[0];
	int(*p)[4] =&brr[0];//  int(*p)[4] = &brr[0][0]; 错误
	Arr_point p=arr;  //  等价于上面两种定义方式
	p++;    //  一次加一行数据,十六个字节(横向)
	int* q = &brr[0][0];
		q++;  //  一次加一个数组元素的数据,四个字节
		   int *p=brr; 错误
		   int *p=&brr[0];  错误
		   int *p=&brr;   错误
		int(*w)[3][4] = &brr;
		w++;   //  一次加一个二维数组的数据,12个int,48个字节 
}     

指针数组

一个保存指针类型数据的数组

const char *arr[5]={"hello","world"};
arr[0]="hi"; //hello 可修改为 hi
const char *p=arr[0];

函数指针

int add(int a, int b) {
	return a + b;
}
int mul(int a, int b) {
	return a * b;
}
int main() {
	int a, b;
	char op;
	scanf("%d%d", &a, &b);
	scanf("%s", &op);
	int (*pfun)(int, int);//  定义函数指针
	if (op == '+') {
		pfun = add;
	}
	else {
		pfun = mul;
	}
	int  result = pfun(a, b);
	printf("%d", result);
}

五、二级指针

在这里插入图片描述

六、const 和 指针 的结合

const 与 一级指针

int a=1;
int const *p=&a;
*p=2;

const修饰指针变量,即 p的值不能发生改变, 但是可以通过解引用修改a的值

int a=1,b=2;
int const *p=&a;//  等价于 const int *p=&a;
p=&b;

const修饰p所指向的值,这个值不能发生改变,但是可通过对p值得修改,从而p的指向

int a=1int const * const p =&a;//等价于const int * const p=&a; 

p的值和p所指向的值都不能发生改变

一级指针的正确定义
在这里插入图片描述

const 与 二级指针

二级指针的使用

int a=0,b=0;
int *p=&a;
int ** q=&p;
*p=1;
**q=2;
*q=&b;
**q=3;
p=&a;
**q=1;
//a: 1  b:3

二级指针的正确定义

七、判断大小端

int main() {
	int num = 0x12345678;
	int *p = #
	char* q = (char*)p;//强制转换
	printf("%x", *q);
}
\\运行结果为 78  

通过对指针的强转,可知windows为小端存储
小端存储:低位存储低位数据,高位存储高位数据,大端存储反之

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:25:04  更:2022-08-06 10:28:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:17:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码