基础知识
指针就是地址
空指针和野指针
空指针:
(1)、指向编号0的空间
(2)、空指针是给指针变量初始化的
(3)、空指针是不可访问的 (当p是空指针 *p = 100 是不行的)
(4)、0~255号内存编号是系统占用的,不可以直接访问
野指针:
- 野指针不可访问 *p
- 禁止使用 int * p = (int *)0x1100;
const修饰指针:
// 5、const修饰指针
const int * p3 = &a;
//(1)const修饰指针 -- 常量指针 -- 常量的指针
// 指针的指向可以修改 p = &b 对
// 指针指向的值不可以改 *p = 20 错
int * const p4 = &a;
//(2)const修饰常量 -- 指针常量 -- 指针是常量
// 指针的指向不可以修改 p = &b 错
// 指针指向的值可以改 *p = 20 对
const int * const p5 = &a;
//(3)const 都修饰
// 指针的指向不可以修改 p = &b 错
// 指针指向的值不可以改 *p = 20 错
程序
#include<iostream>
using namespace std;
void bubbleSort(int * arr,int len);
void printArr(int * arr,int len);
void swap01(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap02(int *a,int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
/*指针就是地址*/
int main()
{
// 1、定义指针
cout << "----------------------------------[part-1 定义指针]" <<endl;
int a = 10;
int b = 20;
// 指针定义语法: 数据类型 * 指针变量名
int * p;
int * p2 = &b;
// 让指针记录变量a的地址
p = &a;
cout << "a的地址:" << &a << endl;
cout << "p:" << p << endl;
// 2、使用指针
cout << "\n\n----------------------------------[part-2 使用指针]" <<endl;
// 解引用
*p = 1000;
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;
// 3、指针占用的内存空间
cout << "\n\n----------------------------------[part-3 指针内存]" <<endl;
cout << "sizeof(int *)=" << sizeof(int *) << endl;
cout << "sizeof(float *)=" << sizeof(float *) << endl;
cout << "sizeof(char *)=" << sizeof(char *) << endl;
// 4、空指针和野指针
// 空指针:
//(1)、指向编号0的空间
//(2)、空指针是给指针变量初始化的
//(3)、空指针是不可访问的 (当p是空指针 *p = 100 是不行的)
//(4)、0~255号内存编号是系统占用的,不可以直接访问
// 野指针:
//(1)、野指针不可访问 *p
//(2)、禁止使用 int * p = (int *)0x1100;
// 5、const修饰指针
cout << "\n\n----------------------------------[part-5 const修饰指针]" <<endl;
const int * p3 = &a;
//(1)const修饰指针 -- 常量指针 -- 常量的指针
// 指针的指向可以修改 p = &b 对
// 指针指向的值不可以改 *p = 20 错
int * const p4 = &a;
//(2)const修饰常量 -- 指针常量 -- 指针是常量
// 指针的指向不可以修改 p = &b 错
// 指针指向的值可以改 *p = 20 对
const int * const p5 = &a;
//(3)const 都修饰
// 指针的指向不可以修改 p = &b 错
// 指针指向的值不可以改 *p = 20 错
// 6、指针和数组
cout << "\n\n----------------------------------[part-6 指针和数组]" <<endl;
// 利用指针访问数组中的元素
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
cout << "第一个元素" << arr[0] << endl;
int * p6 = arr;
cout << "利用指针访问第一个元素" << *p6 << endl;
p6++;//偏移4个字节
cout << "利用指针访问第二个元素" << *p6 << endl;
// 7、指针和函数
cout << "\n\n----------------------------------[part-7 指针和函数]" <<endl;
int c = 100;
int d = 90;
// 值传递
swap01(c,d);
cout << "c = " << c << " d = "<< d<< endl;
// 地址传递
swap02(&c,&d);
cout << "c = " << c << " d = "<< d<< endl;
// 7、小案例
cout << "\n\n----------------------------------[part-7 案例]" <<endl;
// 封装一个函数,对整型数组进行排序
// 定义一个数组
int arr2[]={4,2,8,0,5,7,1,3,9};
int lenarr2 = sizeof(arr)/sizeof(arr[0]);
// 创建函数
bubbleSort(arr,lenarr2);
printArr(arr,lenarr2);
}
// 指针、数组、函数
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 printArr(int * arr,int len)
{
for (int i = 0;i<len;i++)
{
cout << arr[i] << endl;
}
}
输出