C++中指针的相关知识

1指针的大小

指针的大小为4个字节,能够寻址的最大空间为4GB,指针的一般存在再内存中的栈区,其存放的值是某一个对象的地址,这个对象可能是C++语言中一个普通的数据类型,也有可能是一个结构体或者类对象。

2指针的分类

指针可以分为普通指针,常量指针,普通指针的指向可以更改,指向内存的空间的数据内容也可以更改。常量指针是指该指针指向的值为常量,不可以更改,但是该指针的指向可以更改。

指针常量固定的是指针到指向对象的映射已经固定,相当于建立了一个指针指向对象的固定通路,其指向不可以更改,所指的内容可以更改

int a, b = 10;

	const int * p = &a;
	//*p = 20; 该操作是违法的
	p = &b;


	//下面是一个指针常量
	int * const p2 = &a;
	//p =&b; 该操作是违法的
	*p2 = 20;

我们通过举一反三可以知道,如果有两个const关键字修饰的呢,这样也是可以的哦

const int * const p = new int;

这样指针的指向是固定的,指针指向的内容也是不可以修改的哦,要特别注意

3空指针

空指针常常用于指针初始化,刚开始你现在是找不到一块内存空间来让指针指的话,那你就让他指向内存区的首地址,也就是编号为0的地址咯,由于在内存模型中,前面一段的内容是被系统把保留的部分,是不可以用来读写的哦。这里放一个内存分区模型来协助记忆
在这里插入图片描述
需要注意的一点是,如果是空指针的话,是不需要被释放的哟,所有在黑马的课程中,在进行内存的释放之前,往往先会对指针进行非空判断的:

if(p!=Null)
{
delete p;
p = Null;

}

野指针

野指针野指针,说明这个指针也有有蛮野的啦,当程序员创建一个指针,并将它随便指向一个未被分配的地址的话,时会出现系统错误的,比如:

int * p;
p =    (int *)0x1100
//是会出现问题的啦

数组与指针

一维度数组的数组名称可以看成是指针,但是两者并不是等价的。由于在C++中数组的特殊性质:不能用另一个数组初始化,不能被直接拷贝,所以用数组作为输入参数的时候,实际上传进去的是数组的首地址;

void mysort(int Arr[])
{
	cout <<Arr[3] << endl;
	int L = sizeof(Arr) ;
	cout <<sizeof(Arr)<< endl;
	int temp = 0;

}

void main()
{
	//
		int a[] = { 3,5,6,1,6,2,4 };
		cout << "来看一看数组名称a的内容是什么" << *a << endl;
		cout << "来看看数组a的第一个元素的地址是啥"<<&a[0]<< endl;
	//这样我们有理由相信  a = &a[0]了吗,实际上是不等价的
		cout << "a的大小为" << sizeof(a)<<"&a[0]的大小为:"<<sizeof(&a[0])<<endl;
		//根据这个我们可以知道,数组名称实际上就是数组的首地址
		cout <<*a << endl;
	    cout << "a的大小为"<<sizeof(a)<< endl;
		cout << sizeof(a)/sizeof(int)<< endl;
		mysort(a);
		system("pause");

	int a[] = { 1,2,3,4,5 };
	int *p = a; //错误信息会提示,应该使用{.....}来初始化聚合对象
	cout << sizeof(a)<<"   "<<sizeof(p)<< endl;
	system("pause");
}

输出的结果为:

来看一看数组名称a的内容是什么3
来看看数组a的第一个元素的地址是啥008FFDA8
a的大小为28&a[0]的大小为:4
3
a的大小为28
7
1
4
请按任意键继续. . .

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值