C++指针

本文详细介绍了C++中的指针,包括指针用于间接访问内存、指针变量的定义、指针的内存占用、空指针的用途及限制、野指针的危险性、const修饰指针的三种情况,以及指针在数组和函数中的应用。通过对这些概念的深入理解,读者能够更好地掌握C++指针的使用。

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

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

内存的编号是从0开始记录的,一般用16进制数字表示,可以利用指针变量来保存地址。

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

#include <iostream>
using namespace std;

int main() {

	int num = 10;
	int* p = &num;

	cout << p<<endl;
	cout << *p<<endl;
	system("pause");
    return 0;
}

指针所占内存空间

指针也是一种数据类型,这一种数据类型在32位操作系统的计算机中占4个字节,在64位操作系统的计算机中占8个字节。

#include <iostream>
using namespace std;

int main() {
	cout<<sizeof(int*) << endl;//指针的数据类型的所有在64位中都是8个字节,32位是4个字节
	cout << sizeof(float*) << endl;
	cout << sizeof(double*) << endl;
	cout << sizeof(char*) << endl;
	system("pause");
    return 0;
}

空指针

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

用途:初始化指针变量。

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

#include <iostream>
using namespace std;

int main() {

	int* p = NULL;

	//cout << *p;//这是错误的表达

	system("pause");

    return 0;
}

野指针

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

#include <iostream>
using namespace std;

int main() {

	int* p = (int *)0x1123;

     cout << *p;//这是错误的表达,指针没有权限访问非法的内存空间
	system("pause");
    return 0;
}

const修饰指针

const修饰指针有三种情况:

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

语法如下:

const 数据类型 * 变量名;

注意:const修饰的是指针,指针的指向可以改,数值不能改

#include <iostream>
using namespace std;

int main() {

	int num1;
	int num = 10;
	const int * p = &num;

	p = &num1;//正确,指向可以改
	//* p = 20;//错误,数值不能改

	system("pause");
    return 0;
}

2.const修饰常量  ---指针常量

语法如下:

数据类型 * const 变量名;

注意:const修饰的是常量,数值可以改,指针的指向不能改

#include <iostream>
using namespace std;

int main() {

	int num1;
	int num = 10;
	int * const p = &num;

	//p = &num1;//错误,指向不可以改
	* p = 20;//正确,数值能改

	system("pause");
    return 0;
}

3.const即修饰指针,又修饰常量

语法如下:

const 数据类型 * const 变量名;

注意:const即修饰指针,又修饰常量,数值不能改,指针的指向不能改

#include <iostream>
using namespace std;

int main() {

	int num1;
	int num = 10;
	const int * const p = &num;

	//p = &num1;//错误,指向不可以改
	//* p = 20;//错误,数值不可以改

	system("pause");
    return 0;
}

指针与数组

作用:通过指针访问数组里面的元素

#include <iostream>
using namespace std;

int main() {

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

	int* p = arr;//数组名相当于数组arr[0]的地址

	int i;

	for (i = 0; i < 10; i++) {
		cout<<*p<<endl;
		p++;//指针向后移动
	}

	
	system("pause");
    return 0;
}

指针与函数

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

#include <iostream>
using namespace std;

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

int main() {

	int num1 = 10;
	int num2 = 20;
	swap(&num1, &num2);
	cout << num1 << endl;
	cout << num2 << endl;

	system("pause");
    return 0;
}
#include <iostream>
using namespace std;
void maopao(int* arr, int num) {
	int i, j;
	int temp;
	for (i = 0; i <= 9; i++) {
		for (j = 0; j <= 8 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (i = 0; i <= 9; i++) {
		cout<<" " << arr[i];
	}
}

int main() {

	int arr[10] = { 12,25,6,5,45,23,96,75,24,65 };
	int i = 9;
	maopao(arr, i);

	system("pause"); 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值