欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基础篇-7-指针

程序员文章站 2024-01-02 16:01:16
...

00x1 指针的基本概念
指针的作用:访问内存空间

  • 内存编号从0开始,一般用十六进制表示
  • 可以利用指针变量保存地址基础篇-7-指针

00x2 指针变量的定义和使用
语法: typename * name;

int a = 10 //定义变量a
int * p;  //定义指针p
p = &a; //&a表示a的地址
cout << *p << endl //*p表示a的值

00x3 指针所占的内存空间
不管是什么数据类型,在32位操作系统下,指针时占4个字节;在64位操作系统下,指针占8个字节

00x4 空指针与野指针
空指针:指针变量指向内存中编号为0的空间
常用于赋初值,但容易忘记赋值,而导致误访问,出现空指针异常
tips:0~255之间的内存时系统占用的,不可以访问

int * p = NULL;
cout << *p << endl;

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

int * p = (int*)0x1100;
cout << *p << endl;	//异常:读取访问权限冲突

00x5 const修饰指针
常量指针
指针指向的地址可以修改,但指针指向的值不可以修改(还是可以通过改地址的方式,改指针指向的值)

int a = 10;
int b = 20;
const int * p = &a;//*p = 10
//*p = b; //语法错误
p = &b; //没问题,此时*p = 20;

指针常量
指针指向的地址不可以修改,指向的值可以修改

int a = 10;
int b = 20;
int * const p = &a; //p=&a,*p=a=10
//p = &b; //语法错误
*p = b; //没问题,p=&a,*p=a=b=20;

常量指针常量
指针的指向的地址和指针指向的值都不可以改

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

00x6 指针和数组
作用:替代arr[]

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int *p = arr; //arr就是地址
cout<<*p<<endl; //输出arr[0]
cout<<*(p+1)<<endl; //输出arr[1]
//*(p+1)虽然看起来是偏移了1位,但实际上是偏移了4个字节

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

int a = 10;
int b = 20;
//按值传递
void swap(int a,int b)
{
	int tmp = b;
	b = a;
	a = tmp;
}
//按址传递
void swap(int* a,int* b)
{
	int tmp = *b;
	*b = *a;
	*a = tmp;
}
swap(a,b);  //执行完后,a,b值不变
swap(&a,&b); //执行完后,a,b值交换
/*
	调用swap(int *a,int *b)时传递地址的过程相当于int *a = &a,b同理
*/
相关标签: C++

上一篇:

下一篇: