概念
通过指针间访问内存
定义指针
int a = 10;
//指针定义的语法:数据类型 *指针变量名;
int *p;
//让指针记录变量a的地址
p = &a
//& 为取值符
//此时让
*p = 1000
cout<<*p<<endl;
cout<<a<<endl;
//输出结果均为1000
//精简
int *p = &a;
内存空间
在32位操作系统下指针占用4个内存空间(x86)
在64位操作系统下指针占用8个内存空间
cout<<"sizeof(int *)"<<sizeof(p)<<endl;
输出结果
cout<<sizeof(float *)<<endl;
cout<<sizeof(char *)<<endl;
cout<<sizeof(double *)<<endl;
cout<<sizeof(int *)<<endl;
输出结果均为4
空指针
给指针变量进行初始化
int *p = NULL
//nullptr:空指针的关键字
空指针不可访问
野指针
int *p = (int*)0x0001;
//(int *:强转为地址数据类型)
//野指针为指定一个没有权限的空间
const
定义:常量
第一种:常量指针
const int *p = &a
特点:指针的指向可以修改,指针指向的值不能修改
第二种:指针常量
int *const p =&a
特点:指针指向的地址不可以修改,指向的值可以修改
第三种
const int *const p =&a
特点:指针指向的地址和值都不可以更改
指针和数组
int arr[5] = {1,2,3,4,5};
int *p = arr;
cout<<"用指针输出第一个元素"<<*p<<endl;
p++;//让指针向后偏移4个字节
cout<<"指针输出第二个元素"<<*P<<endl;
指针和函数
#include<iostream>
using namespace std;
void change(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main(void)
{
int a = 10;
int b = 20;
cout << a << endl;
cout << b << endl;
change(&a, &b);
cout << "转换后:" << endl;
cout << a << endl;
cout << b << endl;
}
转换过程没有改变实参
函数、数组和指针结合
#include<iostream>
using namespace std;
void bubbleSort(int*arr, int len)
{
for (int i = 0; i < len-1; 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 printArray(int*arr,int len) {
for (int k = 0; k < len; k++)
{
cout << arr[k] << endl;
}
}
int main() {
int arr[10] = {5,6,1,7,9,2,4,3,1,9};
int len = sizeof arr / sizeof arr[0];
bubbleSort(arr,len);
printArray(arr,len);
}