基础篇-7-指针
程序员文章站
2024-01-02 16:01:16
...
00x1 指针的基本概念
指针的作用:访问内存空间
- 内存编号从0开始,一般用十六进制表示
- 可以利用指针变量保存地址
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同理
*/