网站制作流程图,网站建设浙江,建站平台备案,天津网站建设网站建设文章目录指针的定义和使用指针所占的内存空间空指针野指针const修饰指针指针和数组指针和函数指针、数组、函数案例#xff1a;冒泡排序指针的定义和使用
指针定义的语法#xff1a;数据类型 * 指针变量名
使用指针#xff1a; 可以通过解引用的方式来找到指针指向的内存冒泡排序指针的定义和使用
指针定义的语法数据类型 * 指针变量名
使用指针 可以通过解引用的方式来找到指针指向的内存 指针前加*代表解引用找到指针指向的内存中的数据。
#includeiostream
using namespace std;
int main()
{int a 10;int* p; //定义指针语法数据类型 *指针变量名p a; //指针指向变量a的地址a表示取a的地址//int* p a;等价于上面两行cout a endl;cout p endl;*p 100; //通过*操作指针指向变量的内存*p表示取a的值cout a endl;cout *p endl;system(pause);return 0;
}输出
10
00FDFEA0
100
100指针所占的内存空间
指针也是一种数据类型。 在32位操作系统下指针是占4个字节空间大小不管什么数据类型 在64位操作系统下指针是占8个字节空间大小不管什么数据类型
空指针
空指针指针变量指向内存中编号为0的空间。 用途初始化指针变量。 注意空指针指向的内存是不可以访问的。
int* p NULL; //空指针用于给指针变量进行初始化//空指针是不可以进行访问的
//0~255之间的内存编号是系统占用的因此不可以访问
cout *p endl; //编译失败
*p 100; //编译失败野指针
野指针指针变量指向非法的内存空间。
野指针的成因 1、指针未初始化 指针变量刚被创建时不会自动成为NULL指针它所指向的空间是随机的 2、指针越界访问指针指向的范围超出了合理范围或者调用函数时返回指向栈内存的指针或引用因为栈内存在函数结束时会被释放 3、指针释放后未置空释放后的指针应立即将指针置为NULL防止产生“野指针”。
const修饰指针
1、const修饰指针——常量指针 指针指向的值不可以改 指针的指向可以改。
const int* p1a;
p1b;//正确
*p1100;//错误2、const修饰常量——指针常量 特点 指针的指向不可以改 指针指向的值可以改。
int* const p2a;
p2b;//错误
*p2100;//正确3、const修饰指针和常量 指针的指向和指向的值都不可以该。
const int* const p3a;
p3b;//错误
*p3100;//错误指针和数组
作用利用指针访问数组中的元素。
int main()
{int arr[] { 1,2,3,4,5 };int* p arr;//指向数组的指针arr就是数组首地址cout 利用指针访问第一个元素 *p endl;p;//让指针向后偏移4个字节32位操作系统cout 利用指针访问第二个元素 *p endl;cout 利用指针变量数组 endl;int* p1 arr;for (int i0;i5;i){//利用指针遍历数组cout *p1 ;p1;}system(pause);return 0;
}输出
利用指针访问第一个元素1
利用指针访问第二个元素2
利用指针变量数组
1 2 3 4 5指针和函数
例实现两个数字进行交换
#includeiostream
using namespace std;//值传递
void swap0(int num1, int num2)
{int temp num1;num1 num2;num2 temp;
}
//地址传递
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;system(pause);return 0;
}值传递和地址传递的区别 值传递只是把实参复制传给形参在子函数中修改形参不会改变主函数中的实参 地址传递由于形参和实参表示同一个内容在子函数中修改形参也会改变主函数中的实参。 指针、数组、函数
案例冒泡排序
#includeiostream
using namespace std;void bubbleSort(int* arr, int len)
{for (int i 0; i len; 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] { 9,5,7,3,6,4,8,1,2,0 };//数组长度int len sizeof(arr) / sizeof(arr[0]);//排序bubbleSort(arr, len);//arr就表示数组首地址//输出printArray(arr, len);system(pause);return 0;
}