const修饰指针
const修饰指针有三种情况:
1、const修饰指针——常量指针
const int * p = &a ;
特点:指针的指向可以修改,但是指针指向的值不可以修改
2、const修饰变量——指针常量
int * const p = & a ;
特点:指针指向的值可以修改,但是指针的指向不可以修改。
3、const即修饰指针又修饰常量
const int * const p = &a ;
特点:指针的指向和指针指向的值都不可以修改。
示例:
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 10;
const int* p = &a;
//指针指向的值不能改变,指针的指向可以改变。
p = &b;
//*p = 20;//错误,指针指向的值不可以改变
//指针的指向不可以改变,指针指向的值可以改变。
int* const p2 = &a;
*p2 = 100;
//p2 = &b;// 错误,不能改变指向
//指针的指向和指向的值都不可以改变。
const int* const p3 = &a;
//*p3 = 20;// 错误
//p3 = &b; // 错误
return 0;
}
指针和数组
作用:利用指针访问数组中的元素。
#include <iostream>
using namespace std;
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
//arr就是数组的首地址,即数组第一个元素的地址
int* p = arr;//利用指针访问数组中的第一个元素
//利用指针访问数组中的第二个元素,可以让指针向后偏移4个字节
p++;
cout << "数组中的第二个元素:" << *p << endl;
//利用指针遍历数组
int* p2 = arr;
for (int i = 0; i < 10; i++)
{
cout << *p2 << endl;
p2++;
}
return 0;
}
指针和函数
作用:利用指针做函数参数,可以修改实参的值
#include <iostream>
using namespace std;
void swap(int *p1, int *p2)
{
int temp = *p1;
*p1= *p2;
*p2 = temp;
}
int main()
{
int a = 10;
int b = 20;
//地址传递
//如果是地址传递,可以修饰实参
swap(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
总结:如果不想改变实参,使用值传递,如果想要改变实参,使用引用传递。
指针、数组、函数
案例描述:封装一个函数,利用冒泡排序,实现对整形数组的升序排序
数组为:int arr[10] = {2,4,3.1.7.6.5.8.10,9}
#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 print_array(int* arr ,int len)
{
for (int i = 0; i < len; i++)
{
cout << " " << arr[i];
}
}
int main()
{
int arr[10] = { 2,4,3,1,7,6,5,8,10,9 };
//数组长度
int len = sizeof(arr) / sizeof(arr[0]);
//创建冒泡排序函数
bubbleSort(arr, len);
//打印排序后的数组
print_array(arr, len);
return 0;
}