参考链接
- https://www.bilibili.com/video/BV1et411b73Z?p=56
指针的定义和使用
指针是一个用来保存地址的变量。
int a = 10;
int * p = &a
通过解引用的方式找到指针指向的内存
*p = 1000;
cout << p << endl;
cout << *p << endl;
指针所占内存空间
32位操作系统下,指针都占用4个字节;64位操作系统下,占8个字节。
cout << sizeof(int *) << endl;
cout << sizeof(char *) << endl;
cout << sizeof(float *) << endl;
cout << sizeof(double *) << endl;
空指针
指针变量指向内存中编号为0的空间。
用途:初始化指针变量。
注意:空指针指向的内存不可以访问;0~255编号的内存为系统占用。
int * p = NULL;
野指针
指针变量指向非法的内存空间。尽量避免出现野指针。
int * p = (int *)0x1100;
const 修饰指针
const修饰指针——常量指针
特点:指针的指向可以修改,但指针指向的值不可以改。
const int * p = &a;
const修饰常量——指针常量
特点:指针的指向不可以改,指针指向的值可以改。
int * const p = &a;
const既修饰指针,又修饰常量
特点:指针的指向和指针指向的值都不可以改。
const int * const p = &a;
指针和数组
利用指针访问数组中的元素。
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int * p = arr
for(int i = 0; i < 10; i++)
{
cout << *p << endl;
p++;
}
指针和函数
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 << endl;
cout << b << endl;
system("pause");
return 0;
}
指针传递数组首地址实现冒泡排序
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 i = 0; i < len; i ++)
{
cout << arr[i] << endl;
}
}
int main()
{
int arr[10] = {4, 3, 1, 10, 5, 8, 2};
int len = sizeof(arr);
bubbleSort(arr, len);
printArray(arr, len);
system("pause");
return 0;
}