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++知识库 -> 7_C++_指针 -> 正文阅读

[C++知识库]7_C++_指针

很重要!!!

1、指针的定义和使用
通过指针间接访问内存,用指针记住地址编号
语法:数据类型 * 变量;
定义完之后,要获得变量的地址
语法:指针变量 = & 变量;
&是取址符号。
解引用:找到指针指向的内存中的内容(数值)
语法:*p = 表达式;

2、指针所占的内存空间
指针实际存的是地址
32位操作系统,指针变量占用4个字节(64位下占用8位)
sizeof( 指针变量 ) = 4/8;
与指针的数据类型没有关系

#include<iostream>
using namespace std;


int main() 
{
	int a = 10;
	cout << "a = " << a << endl;

	// 定义指针并赋值
	int* p = &a;

	// 根据指针来改变原变量数值
	*p = 250;

	// 打印出现在的数值
	cout << "a = " << a << endl;

	// 打印各种数据类型指针的大小
	cout << "The size of int point is: " << sizeof(int*) << endl;
	cout << "The size of p point is: " << sizeof(p) << endl;
	cout << "The size of float point is: " << sizeof(float*) << endl;
	cout << "The size of double point is: " << sizeof(double*) << endl;
	cout << "The size of char point is: " << sizeof(char*) << endl;

	system("pause");
	return 0;

}

3、空指针
内存空间编号为0的内存
空指针用于指针变量初始化
空指针不可以进行访问操作
0~255的内存编号是系统占用的,不能更改
语法:* p = NULL;

4、野指针
指针变量指向的是非法空间
尽量避免野指针,也不要访问野指针
例如:
int * p = (int **) 0X1100;

5、const常量指针
(1)const修饰指针:常量指针
语法:const int *p = & a;
特点:指针的指向可以修改,指针指向的值不可以修改
(2)const修饰常量:指针常量
语法:int *const p = & a;
特点:指针的指向不可以改,指针指向的值可以修改
(3)const既修饰指针又修饰常量
特点:指针的指向和指向的值都不可以修改

#include <iostream>
using namespace std;


int main() 
{
	int a = 10;
	int b = 20;
	cout << "a和b分别是: " << a << "  " << b << endl;

	a = 10;
	b = 20;
	// 常量指针——可改变地址不可改变值
	const int* p1 = &a;
	//*p1 = 50;	错误!
	p1 = &b;	// 可以实现
	cout << "a和b分别是: " << a << "  " << b << endl;
	cout << " *p1 = " << *p1 << endl;

	a = 10;
	b = 20;
	// 指针常量——可改变值不可改变地址
	int* const p2 = &a;
	*p2 = 50;	// 可以实现
	//p2 = &b;	错误!
	cout << "a和b分别是: " << a << "  " << b << endl;
	cout << " *p2 = " << *p2 << endl;

	a = 10;
	b = 20;
	// 指针常量都修饰——地址和值都不可改变
	const int* const p3 = &a;
	//*p3 = 50;	错误!
	//p3 = &b;	错误!
	cout << "a和b分别是: " << a << "  " << b << endl;
	cout << " *p3 = " << *p3 << endl;

	system("pause");
	return 0;
}

6、利用指针访问数组
代码:利用指针遍历数组的所有值

#include <iostream>
using namespace std;

int main() 
{
	int arr[10] = { 11,22,33,44,55,66,77,88,99,110 };
	int* p = arr;
	for (int i = 0; i < 10; i++) 
	{
		cout << "数组的第"<< i+1 << "个元素是:" << *p << endl;
		p++;
	}
	system("pause");
	return 0;
}

7、指针与函数
讨论:指针作为参数送入函数中情况如何?
地址传递:指针作为参数送入函数中
地址传递可以改变实参

#include <iostream>
using namespace std;

void swap(int* p1, int* p2) 
{
	int temp = *p2;
	*p2 = *p1;
	*p1 = temp;
}

int main() 
{
	int a = 10;
	int b = 100;
	cout << "a和b分别是: " << a << "  " << b << endl;

	swap(&a, &b);
	cout << "a和b分别是: " << a << "  " << b << endl;

	system("pause");
	return 0;
}

总结:不想改变实际参数——值传递,改变实际参数——地址传递

8、编程案例:
封装一个函数,利用冒泡排序,实现对数组的升序排列

#include <iostream>
using namespace std;

// 冒泡排序算法
void Bubble_Sort(int* arrp,int len) 
{
	int temp = 0;
	for (int i = 0; i < len - 1; i++) 
	{
		for (int j = 0; j < len - i - 1; j++) 
		{
			if (arrp[j] > arrp[j + 1]) 
			{
				temp = arrp[j + 1];
				arrp[j + 1] = arrp[j];
				arrp[j] = temp;
			}
		}
	}
}

// 遍历打印函数
void Print_Array(int* p,int len) 
{
	for (int i = 0; i < len; i++) 
	{
		cout << *p;
		p++;
		cout << endl;
	}
}


int main() 
{
	// 先定义数组
	int arr[12] = { 55,69,75,12,95,36,4,18,222,8,66,48 };

	// 求出数组的长度
	int lenth = sizeof(arr) / sizeof(arr[0]);
	cout << "这个数组的长度是: " << lenth << endl;

	// 导入冒泡排序函数
	Bubble_Sort(arr, lenth);

	// 遍历并打印数组
	Print_Array(arr, lenth);

	system("pause");
	return 0;
}

显示的结果是:

这个数组的长度是: 12
4
8
12
18
36
48
55
66
69
75
95
222
请按任意键继续. . .
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:52:35  更:2022-02-16 12:53:22 
 
开发: 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 6:16:18-

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