C++学习笔记——指针

这篇具有很好参考价值的文章主要介绍了C++学习笔记——指针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1,指针的基本概念

指针的作用:可以通过指针间接访问内存

  • 内存的编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址C++学习笔记——指针,c++,学习,笔记

上图中的p就是a变量的指针,也可以记作*a

2,指针变量的定义和使用

指针变量定义语法:数据类型*变量名;

int main(){
	//1,指针的定义 
	int a=10;
	int *p; 
	p=&a;//指针指向变量a的地址 
	cout<<"a的地址为 "<<&a<<endl;//打印数据a的地址:0x6ffe14
	cout<<"指针p为 "<<p<<endl;//打印指针变量p:0x6ffe14
	//2, 使用指针
	//可以通过解引用的方式来找到指针指向的内存 
	//指针前加*代表解引用,找到指针指向的内存中的数据
	*p=1000;
	cout<<"a= "<<a<<endl;
	cout<<"*p= "<<*p<<endl; 
}

*p——解引用的含义,可以通过指针来保存一个地址: 

C++学习笔记——指针,c++,学习,笔记

3,指针所占内存空间

指针与数组一样,也是一种数据结构,既然是一种数据结构,那么所占的内存空间是多少呢?

  • 在32位操作系统下,指针是占4个字节空间大小,不管是什么数据类型。
  •  在64位操作系统下,指针是占8个字节空间大小。(博主这里的os用的是64位的)

C++学习笔记——指针,c++,学习,笔记

4,空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的

int main(){
    //指针变量p指向内存地址编号为0的空间
    int *p=NUll;
    //访问空指针报错
    //内存编号为0~255为系统所占内存,不允许用户访问
    cout<<*p<<endl;
}

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

int main(){
    //指针变量p指向内存地址编号为0x1100的空间
    int *p=(int *)0x1100;
    //访问野指针报错
    cout<<*p<<endl;
    
}

(int *)0x1100的作用在于将后面的0x1100十六进制数强制转换为内存地址。 

5,const修饰指针

const——n.常数;恒量        adj.恒定的;不变的

假设有以下情景,a,b,p的值如下

C++学习笔记——指针,c++,学习,笔记
const修饰指针有三种情况:

1,const修饰指针——常量指针

特点:指针的指向可以修改,但指针指向的值不可以修改

const int *p=&a;
*p=20;//错误,指针指向的值不可以修改
p=&b//正确,指针的指向可以改

C++学习笔记——指针,c++,学习,笔记 (红框为不允许)

2,const修饰常量——指针常量

特点:指针的指向不可以改,指针指向的值可以改,与常量指针正好相反。 

int * const p=&a;
*p=20;//正确,指向的值可以改
p=&b;//错误,指针指向不可以改

C++学习笔记——指针,c++,学习,笔记

(红线为不允许)

3,const既修饰指针,又修饰常量

特点,指针的指向和指针指向的值都不可以改

const int * const p=&a;
*p=20;//错误
p=&b;//正确

C++学习笔记——指针,c++,学习,笔记 (红线红框均不可改)

6,指针和数组

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

#include<bits/stdc++.h>
using namespace std;
int main(){
	int arr[]={1,2,3,4,5,6,7,8,9,10};
	int *p=arr;
	for(int i=0;i<10;i++){
		cout<<*p<<endl;
		p++;//因为p是整形指针,p++的时候地址就会移动四个字节,到数组的下一个数据。
	}
}

输出结果: C++学习笔记——指针,c++,学习,笔记

7,指针和函数

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

#include<bits/stdc++.h>
using namespace std;
void swap1(int a,int b){
	int temp=a;
	a=b;
	b=temp;
}
//地址传递
void swap2(int *p1,int *p2){
	int temp=*p1;
	*p1=*p2;
	*p2=temp;
} 
int main(){
	//指针和函数
	//1,值传递
	int a=10;
	int b=20;
	//swap1(a,b);a=20,b=10
	//2,地址传递
	//如果是地址传递,可以修饰实参
	swap2(&a,&b);
	cout<<"a= "<<a<<"b= "<<b<<endl; //a=20,b=10
}

C++学习笔记——指针,c++,学习,笔记

 a,b更换前后,内存空间的内容变化。

C++学习笔记——指针,c++,学习,笔记

8,指针,数组,函数

案例:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

例如数组:int arr[10]={4,3,6,9,1,2,10,8,7,5}

#include<bits/stdc++.h>
using namespace std;
void swap(int *arr,int len){//冒泡排序
	for(int i=0;i<len-1;i++){
		for(int j=0;j<len-i-1;j++){
			if(arr[j]>arr[j+1]){
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
} 
void printarr(int *arr,int len){
	for(int i=0;i<len;i++){
		cout<<arr[i]<<endl;
	}
}
int main(){
	int arr[10]={4,3,6,9,1,2,10,8,7,5};
	int len=10;
	swap(arr,len);
	printarr(arr,len);
}

此案例的重点在于让我们学会:文章来源地址https://www.toymoban.com/news/detail-818601.html

  • 将数组传进函数中,即是把数组首地址传入即可
  • 冒泡排序熟练的运用
  • 为使函数体更加灵活,在数组长度方面选择一个形参,而非固定长度

到了这里,关于C++学习笔记——指针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++学习】智能指针

    🐱作者:一只大喵咪1201 🐱专栏:《C++学习》 🔥格言: 你只管努力,剩下的交给时间! 如上图代码所示,在Func中开辟动态空间,在调用完Division函数后释放该空间。 如果Division没有抛异常,那么动态空间会被正常释放。 如果Division抛了异常,就会去匹配对应的catch,而Fu

    2024年02月06日
    浏览(44)
  • 【C++学习】函数指针

    函数指针的应用场景,主要是用于回调,用个函数指针,调用方自己实现函数的内容,但调用方式和入参由自己定义。

    2024年02月10日
    浏览(24)
  • c++ 学习系列 -- 智能指针

    C++ 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。但使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等。 另外,使用普通指针容易产生 野指针、悬空指针 等问题。 所以 C++11 就引入了智能指

    2024年02月13日
    浏览(44)
  • C++智能指针学习——小谈引用计数

    目录 前言 控制块简介 共享控制块 引用计数与弱引用计数创建过程 __shared_ptr __shared_count _Sp_counted_base 弱引用计数增加过程 再谈共享控制块 __weak_count 引用计数增加过程 弱引用计数的减少过程 弱引用计数减为0 引用计数的减少过程 引用计数减为0 参考文章 本文结合源码讨论

    2024年04月08日
    浏览(38)
  • C++笔记之基类指针动态地指向某一个子类情况列举

    code review!

    2024年02月12日
    浏览(38)
  • 虚幻C++入门个人笔记(3)——接口、智能指针、动画蓝图、行为树、EQS系统

    接口的词义广泛,用来陈述功能、选项,与其他程序结构进行沟通的方式。接口抽象出了交互结构,提供了两个未知逻辑交互的便捷性。对于编程中,如何更好地设计低耦合程序起到了至关重要的作用。设计者可以在互不关心的情况下,进行友好的程序设计,并且通过接口来

    2023年04月14日
    浏览(32)
  • 从0开始学习C++ 第十二课:指针强化

    学习目标: 理解常量指针与指针常量的区别。 学习如何使用函数指针。 掌握指针与数组的高级使用技巧。 学习内容: 常量指针与指针常量 概念: 常量指针是一个指向常量的指针,这意味着不能通过这个指针来修改其指向的值。指针常量是一个指针,其自身的值不可以修改

    2024年01月22日
    浏览(32)
  • C++学习算法心得和部分算法讲解(三指针)

    本文代码皆是可运行代码,选用了逻辑和实现最简单的方式呈现,部分代码带有注解,可供初学者学习!【点赞+收藏】 目录 一、三指针: 二、汉诺塔: 三、N皇后问题: 四、熄灯问题: 五、二进制密码锁 六、快排(模板) 七、归并排序(模板) 八、逆序对的数量: 九、

    2024年02月12日
    浏览(32)
  • C++笔记之从使用函数指针和typedef到使用std::function和using

    参考笔记:C++笔记之从数组指针到函数数组指针(使用using name和std::function) code review!

    2024年02月15日
    浏览(33)
  • 【C++】auto_ptr为何被唾弃?以及其他智能指针的学习

    搭配异常可以让异常的代码更简洁 文章目录 智能指针     内存泄漏的危害     1.auto_ptr(非常不建议使用)     2.unique_ptr     3.shared_ptr     4.weak_ptr 总结 C++中为什么会需要智能指针呢?下面我们看一下样例:  在上面的代码中,一旦出现异常那就会造成内存泄漏,什么是内存

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包