【C++004】指针简单介绍

指针基本概念

定义指针

指针的作用:
可以通过指针间接访问内存(指针记录地址编号,或,指针就是地址)。

int a;
int*p;	//数据类型 * 指针变量名
a=&p;	//让指针记录变量 a 的地址

&p 是将元素 p 转化成一个地址。而 *p 则是接收地址,并对其进行访问。

使用指针

  1. 可以通过解引用的方式找到指针指向的内存。
  2. 指针前加上 * ,表示解引用。
  3. 可以用指针间接访问数值,并对其进行修改。

指针所占内存

系统操作系统字节空间
32位(x86)4个字节
64位(x64)8个字节

空指针和野指针

空指针

定义: 初始化指针变量(空指针指向的内存不可以访问)

int*p;
*p=NULL;
	 /*
	 此时系统给其分配的空间位于[0,255],
	 但[0,255]为系统占用内存,不允许用户访问。
	 */

野指针

定义: 指针变量指向非法的内存空间(可以理解为越界行为)。

int *p;
*p=(int*)0x1100;
	//在程序中,出现野指针就会报错。

const 修饰指针

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

指针的指向可以修改,但指针指向的值不可以改。

int a=10;
int b=10;
const int*p=&a;

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

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

指针的指向不可以改,但指针指向的值可以改。

int a=10;
int b=10;
const int*p=&a;

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

const 既修饰指针,又修饰常量

指针的指向和值都不可以改。

const int * p=&a;

指针和数组

int arr[5]={0,1,2,3,4};
int * p=arr;        
 //arr就是数组首地址
                                    
cout<<"利用指针访问第一个元素:”<<*p<<endl;
 //其输出的结果为 0 。
               
p++//让指针向后偏移四个字节(x86)
 
 cout<<"利用指针访问第二个元素:"<<*p<<endl;

指针和函数

值传递

地址传递

#include<iostream>
using namespace std;
void swap(int*a ,int*b);

int main()
{      
int a=10;
int b=20swap(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;

return 0;
}

void swap(int*a ,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
cout<<"swap a="<<a<<endl;
cout<<"swap b="<<b<<endl;
}
	//实参 a ,b 和形参 a ,b 都发生了改变

双指针( ** )

双指针可以理解为,指针的指针。在处理二维数组中可以用到。

int ** p;

而对于为二维数组开辟空间则需要使用到 new 。此处在【C++006】中详细讲解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3Q3qQ

谢谢老板打赏,我将会继续努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值