1.指针定义
语法:数据类型 * 指针变量名
int *p;
指针记录变量a的地址
p=&a;
2.使用指针
可以通过解引用的方式来找到指针指向的内存
指针前加*代表解引用
int a=10;
int *p;
p=&a;
*p=1000;
cout<<a<<"\n";
cout<<*p<<"\n";
//结果
1000
1000
指针的所占空间大小与操作系统有关:32位下4个字节,64位下8个字节(不分类型)
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
(访问空指针报错,内存编号0~255为系统占用内存,不允许用户访问)
int *p=NULL;//NULL==0
野指针:指针变量指向非法的内存空间
int *p=(int *)0x1100;//指针变量p指向内存编号为0x1100的空间
cout<<*p<<"\n";//访问野指针报错
(空指针和野指针都不是我们申请访问的空间,因此不要访问)
int a=10;
int b=10;
int * p=&a;
const修饰指针
常量指针:指针的指向可以修改,但指针指向的值不可以修改
const int *p=&a;
*p=20//错误
p=&b;//正确
const修饰常量
指针常量:指针的指向不可以修改,但指针指向的值可以修改
int * const p=&a;
上述样例结果相反
const既修饰指针又修饰常量
const int * const p=&a;
指针的指向和指针指向的值都不可以改变
址传递(可修改参数)
#include <iostream>
using namespace std;
void swap(int *a, int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=10;
int b=20;
swap(&a,&b);
}
指针,数组,函数结合
#include <iostream>
using namespace std;
void BubbleSort(int * arr, int len)
{
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void PrintArr(int * arr, int len)
{
for (int i = 0; i < len; i++)
{
cout<<arr[i]<<" ";
}
}
int main()
{
int arr[10]={4,3,6,9,1,2,10,8,7,5};
int len=sizeof(arr)/sizeof(arr[0]);
BubbleSort(arr,len);
PrintArr(arr,len);
return 0;
}