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++学习之旅(十二) 指针

学习资料及工具:bilibili视频网站黑马程序员匠心之作,BV1et411b73Z,共大概300+集https://www.bilibili.com/video/BV1et411b73Z?p=2

工具:Visual 2015

虽然不是0基础,但是之前感觉之前学过的和没学过一样,所以用0基础视频进行学习,此系列帖子作为笔记使用(主要是字丑)。


目录

正文

7 指针

7.1 指针的基本概念

7.2 指针变量的定义和使用

7.3 指针所占用的内存空间

? ? ? ???7.4 空指针和野指针

7.5 const修饰指针

?7.6 指针和数组

7.7 指针和函数


正文

7 指针

7.1 指针的基本概念

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

  • 内存编号是从0开始记录,一般用十六进制的数字表示(可用int强行改为10进制)
  • 可以利用指针变量保存地址

7.2 指针变量的定义和使用

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

指针、变量各自地址的关系(图源:C++黑马程序)

a是变量,p是指针,黑框是地址(可以明显的看到在套娃)

?即 指针就是一个地址

?

#include<iostream>
using namespace std;
int main()
{
	//1.定义指针
	int a = 10;//创建一个变量

	int * p = &a;//创建一个指针p并且把a的地址赋给p

	cout << "a的地址为 :" << &a << endl;
	cout << "指针p为 :" << p << endl;
	//2.使用指针——通过解引用的方式
	//解引用:在指针符号前加一个*(*p代表找到了内存的数据)
	*p = 1000;//等于直接修改a的值
	cout << "a = " << a << endl;
	cout << "*p = " << *p << endl;
	cout << "p = " << p<<endl;//观察p的变化

	system("pause");

	return 0;
}

结果如下:

7.3 指针所占用的内存空间

在32位操作系统下,占用4个字节空间,和类型无关(开发过程中基本属于32位操作系统——不是你电脑的系统位数)

?

?在×86的条件下编译系统为32位

#include<iostream>
using namespace std;
int main()
{

	int a = 10;//创建一个变量
	int * p = &a;//创建一个指针

	cout << "指针p所占的内存为 :" << sizeof(p) << endl;// sizeof(p)= sizeof(int *)
	cout << "指针p所占的内存为 :" << sizeof(int *) << endl;
	cout << "指针p所占的内存为 :" << sizeof(float *) << endl;
	cout << "指针p所占的内存为 :" << sizeof(double *) << endl;

	system("pause");

	return 0;
}

?结果如下:

?7.4 空指针和野指针

作用:指针变量指向内存为0的指针

用途:初始化指针变量

注意:空指针指向的变量不允许访问

?

#include<iostream>
using namespace std;
int main()
{
	int *p = NULL;//创建一个空指针

	//在0~255的内存空间是系统的内存,不允许用户进行操作
	*p = 300;//解引用

	system("pause");

	return 0;
}

?可以先点击生成查看代码

生产代码时没有问题,但是运行却报错?

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

#include<iostream>
using namespace std;
int main()
{
	int *p = (int *)0x1100;//创建一个野指针

	cout<<*p<<endl;

	system("pause");

	return 0;
}

?效果与空指针类似,语法没有问题,但是不能运行,故不再展示

7.5 const修饰指针

const修饰指针一般三种情况:

  1. const修饰指针——常量指针(指针指向可以修改,但值不可修改)
  2. const修饰常量——指针常量(指向不可以改,但值可以改)
  3. const即修饰指针,也修饰常量(都不可以改)

图源:C++黑马程序员?

?

记忆:const译为常量,修饰谁,不可修改谁?

#include<iostream>
using namespace std;
int main()
{
	//1.const修饰指针——常量指针
	int a = 10;
	int b = 20;

	const int *p = &a;

	//*p = 20;错误,不能解引用,*p的值不能修改,必须为10
	p = &b;//正确,指向可以修改

	//2.const修饰常量——指针常量
	int * const p2 = &a;
	*p2 = 100;//正确
	//p2 = &b;错误,不可修改指向

	//3.const修饰二者
	const int * const p3 = &a;//都不可以修改

	system("pause");

	return 0;
}

?7.6 指针和数组

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

#include<iostream>
using namespace std;
int main()
{
	//创建一个数组
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	int *p = arr;//arr就是数组的首地址(数组名)

	cout << "利用指针访问第一个数据 :" << *p << endl;

	//利用指针打印数组
	int *p2 = arr;
	for (int i = 0; i < 10; i++)
	{
		cout << *p2<<"\t";
		p2++;//p2每自加一次,就是四个字节
		
	}
	cout << endl;

	system("pause");

	return 0;
}

结果如下:

7.7 指针和函数

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

?

#include<iostream>
using namespace std;
void swap(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	//地址传递,即改变的是地址,所以可以修改实参
	swap(&a, &b);
	cout <<"a = "<< a << endl;
	cout <<"b = "<< b << endl;

	system("pause");

	return 0;
}

结果如下:

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:01:58  更:2021-08-25 12:02:39 
 
开发: 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年12日历 -2024/12/27 6:42:01-

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