C++进阶复习

本文详细介绍了C++中的指针概念,包括指针的作用、指针变量的定义与使用、内存空间分配、空指针和野指针的区别、const修饰指针、指针与数组和函数的交互,以及结构体和结构体指针的运用。最后通过一个通讯录系统的案例,展示了指针在实际编程中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 指针

作用:通过指针间接访问内存
1.内存编号是从0开始记录的,一般用十六进制数字表示。
2.可以利用指针变量保存地址。

1.1 指针变量的定义和使用

语法:数据类型 *变量名。如int *a;

#include<iostream>
using namespace std;

int main(){
   
	
	int a = 1;
	//创建指针变量 
	int *p; 
	//让指针记录变量a的地址
	p = &a;
	cout<<"a的地址:"<< &a <<"-" << p <<endl;
	
	//通过解引用找到指针所指内存的数据
	//指针前加 * 代表解引用, 找到指针所指内存的数据
	*p = 10000;
	// 均输出10000 
	cout<< "a= "<< a <<endl;
	cout<< "a= "<< *p <<endl;
	return 0;
} 

1.2 指针所占内存空间

指针也是种数据类型,32位操作系统下:占4个字节,64位下占8个字节。

#include<iostream>
using namespace std;

int main(){
   
	
	//指针所占内存空间
	int a = 10;
	
	int *p = &a;
	//32位下都是占4个字节 
	cout<<"sizeof (int*) = "<<sizeof(int *)<<endl;
	cout<<"sizeof (float*) = "<<sizeof(float *)<<endl;
	cout<<"sizeof (double*) = "<<sizeof(double *)<<endl;
	cout<<"sizeof (char*) = "<<sizeof(char *)<<endl;
	
	return 0;
} 

1.3 空指针和野指针

空指针:指针变量指向内存中编号位0的空间
作用:初始化指针变量。空指针指向的内存不可以访问。

#include<iostream>
using namespace std;
int main(){
   
	//空指针,默认指向内存地址编号为0的空间 
	int *p = NULL;
	//*p = 100 // 错误,因为0 - 255之间内存是 系统占用内存,不允许用户访问。 
	return 0;
} 

野指针:指针变量指向非法的内存空间。

#include<iostream>
using namespace std;
int main(){
   
	//野指针,
	int *p = (int)0x1100;
	//报访问权限错误 
	cout<<*p<<endl;
	return 0;
} 

空指针和野指针都不是用户申请的空间,不能访问。

1.4 const修饰指针

const修饰指针有三种情况:

  1. const修饰指针 - 常量指针
  2. const修饰常量 - 指针常量
  3. const即修饰指针,又修饰常量
//根据 * 和 const位置记录。
1.常量指针:指针的指向可以修改,但是指针指向的值不可以修改
	int a = 10;
	int b = 30;
	// const先修饰的 *,因此指针的指向值不可改,即*p不可改
	const int *p = &a;
	*p = 20; //错误,指针指向的值不可修改
	*p = &b;//正确
2.指针常量:指针的指向不可以修改,但是指针指向的值可以修改
	int a=10,b=20;
	// const 修饰的是 p,因此指针的地址不能改,所以指向不能改
	int *const p = &a;
	*p = 20; //正确,指针指向的值可以修改
	*p = &b;//错误,指针的指向不可以修改
3.修饰指针:指针的指向不可以修改,指针指向的值不可以修改
	int a=10,b=20;
	const int *const p = &a;
	*p = 20; //错误,指针指向的值不可以修改
	*p = &b;//错误,指针的指向不可以修改

1.5 指针和数组

作用:利用指针访问数组中元素

#include<iostream>
using namespace std;
int main(){
   
	
	int arr[5] = {
   1,2,3,4,5};
	//p 指向 arr首地址 
	int *p = arr;
	//输出1 
	cout<<*p<<endl;
	//输出1 
	cout<<*(p++)<<endl;
	//输出2 
	cout<<*(++p)<<endl;
	return 0;
}   

1.6 指针和函数

作用:利用指针作为函数的参数,可以修改实参的值

#include<iostream>
using namespace std;
void swap(int *a,int *b){
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值