文章目录
7 指针
7.1 指针的基本概念
指针的作用:可以通过指针间接访问内存
,内存编号是从0开始记录的,一般用十六进制数字表示
可以利用指针变量保存地址
7.2 指针变量的定义和使用
指针变量定义语法:数据类型*变量名:
int main()
{
//1.定义指针
int a = 10;
//指针定义的语法:指针类型 * 指针变量名;
int *p;
//让指针记录变量a的地址
p = &a;
cout << "&a的地址:" << &a << endl;
cout << "p的地址:" << p << endl;
//2.使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用,找到指针指向内存中的数据
//可以访问,修改
*p = 1000;
cout <<"*p=" << *p << endl;
cout <<"a=" << a << endl;
}
7.3 指针所占空间大小
int main()
{
//32位的操作系统下,无论什么数据类型,指针都只占4字节
//64位的操作系统下,无论什么数据类型,指针都只占8字节
int a = 10;
int* p = &a;
cout << "sizeof(int *)=" << sizeof(int*) << endl;
cout << "sizeof(float *)=" << sizeof(float*) << endl;
cout << "sizeof(double *)=" << sizeof(double*) << endl;
cout << "sizeof(char *)=" << sizeof(char*) << endl;
}
7.4 空指针和野指针
空指针:指针变量指向内存空间中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存空间是不可以访问的
野指针:指针变量指向非法的内存空间
int main()
{
//通过野指针访问0x1100的内存地址的数据
int *p = (int*)0x1100;
//访问野指针报错
cout << *p << endl;
}
7.5 const修饰指针
const修饰指针有三种情况:
1.const修饰指针——常量指针
2.const修饰常量——指针常量
3.const即修饰指针,又修饰常量
技巧:看const右侧紧跟着的是指针还是常量是针就是常量指针,是常量就是指针常量
7.6 指针和数组
作用:利用指针访问数组中的元素
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = arr;//arr就是数组的首地址
cout << "利用指针访问数组的第一个元素的地址:" << *p << endl;
p++;
cout << "利用指针访问数组的第二个元素的地址:" << *p << endl;
cout << "利用指针遍历数组\n";
int * p2 = arr;
for (int i = 0; i < 10; i++)
{
cout << *p2 << endl;
p2++;
}
}
void swap01(int num01, int num02)
{
int temp = num01;
num01 = num02;
num02 = num01;
}
//地址传递
void swap02(int *p1,int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a=10,b=20;
//地址传递
swap01(a, b);//值传递不会改变实参
cout << a <<" " << b << endl;
swap02(&a, &b);//地址传递会改变实参
cout << a<<endl;
cout << b<<endl;
}
7.8 指针、数组、函数
案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排成
例如数组:intarr[10]={43,6,9,1,2,10.8.7.5}
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 printfarray(int *arr,int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
}
int main()
{
//1 创建数组
int arr[10] = {4,1,3,7,5,2,9,6,8,10 };
//数组长度
int len = sizeof(arr) / sizeof(arr[0]);
//2 创建函数,实现冒泡排序
bubbleSort(arr,len);
//3 打印排序后的数组
printfarray(arr,len);
}