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++指针

1、指针的基本概念

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

注:内存编号是从0开始记录的,一般用十六进制数字表示;可以利用指针变量保存地址(指针就是一个地址)

2、如何定义和使用一个指针

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

注:p是一个地址,而*p是一个数据,这是通过解引用的方式(指针前加*号)来找到内存中的数据

例:

#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int* p;
	p = &a;//不要忘记取址符号&
	cout << "a的地址为:" << p << endl;
	cout << "a的值为:" << *p << endl;
	return 0;
}

输出结果:

a的地址为:00BCF920

a的值为:10

3、指针所占内存空间

在32位操作系统(x86)下,一个指针变量所占空间是4个字节;64位(x64)下占8个字节

4、空指针和野指针

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

用途:初始化指针变量

注意:空指针指向的内存不可以访问(0~255之间的内存编号是系统占用的,因此不可以访问)

野指针:指针变量指向非法的(未申请的)内存空间

5、const修饰指针(帮助理解:const后面是啥,啥就被锁定了)

三种情况:

1)const修饰指针---常量指针

特点:指针的指向可以修改,但指针指向的值不可以改(不能通过指针更改内存中的值)

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

释:const后面是int*p这个值,所以值被锁定不可更改,但地址可以更改

2)const修饰常量---指针常量?

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

int*const p=&a;//指针常量
*p=20;//正确
p=&b;//错误

释:const后面是p这个指针地址,所以地址被锁定不可更改,但值可以更改

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

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

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就是数组首地址
	for (int i = 0; i < 10; i++)//让下面的语句执行十圈
	{
		cout << *p << "  ";
		p++;//令指针指向下一位
	}
	return 0;
}

输出结果:1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?10

7、指针和函数

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

#include<iostream>
using namespace std;
	void swap(int* p1, int* p2)//调用前先定义
	{
		int temp = *p1;
		*p1 = *p2;
		*p2 = temp;
	}
	int main()
	{
	int a = 10;
	int b = 20;
	swap(&a, &b);
	cout << "a的值为:" <<a<< endl;
	cout << "b的值为:" <<b<< endl;
	return 0;
}

输出结果:

a的值为:20
b的值为:10

注:*p只有在定义时可以看作是地址(数据类型int一出现,其实就是在为*p这个值申请一段内存空间,所以将&a和&b赋给int*p是可行的)

综合提升案例:

案例描述:封装一个函数,利用冒泡排序,实现对整型数组{4,3,6,9,1,2,10,8,7,5}的升序排列

#include<iostream>
using namespace std;
void bubblesort(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 printArray(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 = sizeof(arr) / sizeof(arr[0]);
	bubblesort(arr, len);
	printArray(arr, len);	
	return 0;
}

输出结果:

1
2
3
4
5
6
7
8
9
10

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

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