指针
用来存放地址的变量
定义指针
int a = 2;//定义变量
int *p = &a;//定义指针变量
cout << "a的地址为:"<<p << endl;//a的地址为:009FF7C0
空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内容是不可以访问的
0-255之间的内存是系统占用的,不可以访问。
野指针:
随便指向一块内存空间,并且解引用指针所指向的内存,会让程序崩溃。
//野指针
int *p = (int *)0x1100;
cout << *p<< endl;
const修饰指针
1:const修饰指针–常量指针
2:const修饰常量–指针常量
3:const既修饰指针又修饰常量
1:常量指针
const int *p=&a;
特点:指针的指向可以改,但指针指向的值不可以改
const离 *p比较近,可以理解为指针指向的内容不可以修改
//const修饰指针
int a = 10, b = 20;
const int *p = &a;//指针指向可以修改,但指针指向的值不可以修改
p = &b;//可以让指针指向其他的变量
//*p = 20;表达式会报错
2:指针常量
int*cosnt p=&a;
特点:指针的指向不可以改,但内容可以改
const离p比较近,可以理解为指针的指向不可以修改
/const修饰常量
int *const p2 = &a;
*p2 = 20;
//p2 = &b;会报错,指针的指向不可以修改
3:const既修饰指针又修饰常量
const int*const p=&a;
特点:指针的指向和内容都不能变
const int *const p3 = &a;
p3 = &b;都会报错
*p3 = 40;
指针和数组
作用:利用指针访问数组中的元素
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int a = sizeof(arr) / sizeof(arr[0]);
int *p = arr;//利用指针指向数组的首地址
for (auto i=0; i<a; i++) {
cout << *p++ << endl;
}
指针和函数
作用:利用指针做函数参数,可以修改实参的值
利用指针传递地址
void swap1(int *a1, int *a2) {
int tmp = *a1;
*a1 = *a2;
*a2 = tmp;
}
int main()
{
int a = 10, b = 20;
swap1(&a, &b);
cout << a << " " << b << endl;
system("pause");
指针 函数 数组
封装一个函数,利用冒泡排序,实现对整形数组的升序排序
void bubble(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 tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main()
{
int arr[] = { 4,3,6,9,1,2,10,8,7,5 };
int *p = arr;
int len = sizeof(arr) / sizeof(arr[0]);
bubble(arr, 10);
for (int i = 0; i < 10; i++) {
cout << *p++ << " ";
}
cout << endl;