c++指针的用法

c和c++都有指针的概念,指针其实就是记录数据地址的变量

一、指针的定义和使用:指针定义的语法:数据类型 *指针变量名;
假设 int a = 10;
int * p;
让指针记录变量a的地址:p = &a;
使用指针的时候需要解引用,在p前加 * 即可, * p就可使用指针;

#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	int *p = &a;
	//查看指针p
	cout << p << endl;
	cout << &a << endl;
	cout << *p << endl;
	cout << a << endl;

	//使用指针
	*p = 500;
	cout << p << endl;
	cout << &a << endl;
	cout << *p << endl;
	cout << a << endl;

	return 0;
}

输出结果为:
006FFAF4
006FFAF4
10
10
006FFAF4
006FFAF4
500
500

二、指针所占空间大小:在32为操作系统中,占4个字节空间大小;在64为操作系统中,占8个字节空间大小。

#include <iostream>
using namespace std;

int main()
{
	cout << sizeof(int *) << endl;
	cout << sizeof(double *) << endl;
	cout << sizeof(float *) << endl;
	cout << sizeof(char *) << endl;

	return 0;
}

运行结果:
4
4
4
4

三、空指针:指针变量指向内存空间为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的

#include <iostream>
using namespace std;

int main()
{
	int *p = NULL;
	//空指针不可访问
	// *p = 100;  会报错
	return 0;
}

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

#include <iostream>
using namespace std;

int main()
{
	int *p = NULL;
	//指针变量指向内存空间为0xll的空间
	p = (int *)0x1100;
	//访问出错
	cout << *p << endl;
	return 0;
}

五、const 修饰指针
3种情况:const修饰指针,——常量指针;
const修饰常量,——指针常量;
const及修饰指针,又修饰常量;
(1)const修饰指针:指针的指向可以修改,但是指针指向的值不可以改;
const int *p = 10;
*P = 20;//错误
p = a;//正确

(2)const修饰常量:指针的指向不可以修改,但是指针指向的值可以改;
int * const p = 10;
*P = 20;//正确
p = a;//错误

(3) const及修饰指针,又修饰常量:指针的指向和指针指向的值都不能更改
const int * const p = 10;

六、指针和数组的使用
利用指针输出数组

#include <iostream>
using namespace std;

int main()
{
	int arr[] = { 1,3,5,3,6,3,6 };

	int *p = arr; //arr就是数组的首地址
	for (int i = 0; i < size(arr); i++)
	{
		cout << *p << endl;
		p++;
	}
	return 0;
}

输出结果:
1
3
5
3
6
3
6

七、指针和函数
注意:值传递不会修改实参的值,地址传递会修改实参的值。

#include <iostream>
using namespace std;

void test1(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
	cout << a << " " << b << endl;
}

void test2(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
	cout << *a << " " << *b << endl;
}


int main()
{
	int a = 4;
	int b = 5;
	test1(a, b);

	test2(&a, &b);

	cout << a << " " << b << endl;

	return 0;
}

输出结果:
5 4
5 4
5 4

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值