指针的作用:可以通过指针间接访问内存。
内存的编号是从0开始记录的,一般用16进制数字表示,可以利用指针变量来保存地址。
指针变量的定义:数据类型 * 变量名;
#include <iostream>
using namespace std;
int main() {
int num = 10;
int* p = #
cout << p<<endl;
cout << *p<<endl;
system("pause");
return 0;
}
指针所占内存空间
指针也是一种数据类型,这一种数据类型在32位操作系统的计算机中占4个字节,在64位操作系统的计算机中占8个字节。
#include <iostream>
using namespace std;
int main() {
cout<<sizeof(int*) << endl;//指针的数据类型的所有在64位中都是8个字节,32位是4个字节
cout << sizeof(float*) << endl;
cout << sizeof(double*) << endl;
cout << sizeof(char*) << endl;
system("pause");
return 0;
}
空指针
空指针:指针变量指向内存中编号为0的空间。
用途:初始化指针变量。
注意:空指针指向的内存是不可以访问的。
#include <iostream>
using namespace std;
int main() {
int* p = NULL;
//cout << *p;//这是错误的表达
system("pause");
return 0;
}
野指针
野指针:指针变量指向非法的内存空间。
#include <iostream>
using namespace std;
int main() {
int* p = (int *)0x1123;
cout << *p;//这是错误的表达,指针没有权限访问非法的内存空间
system("pause");
return 0;
}
const修饰指针
const修饰指针有三种情况:
1.const修饰指针 ---常量指针
语法如下:
const 数据类型 * 变量名;
注意:const修饰的是指针,指针的指向可以改,数值不能改
#include <iostream>
using namespace std;
int main() {
int num1;
int num = 10;
const int * p = #
p = &num1;//正确,指向可以改
//* p = 20;//错误,数值不能改
system("pause");
return 0;
}
2.const修饰常量 ---指针常量
语法如下:
数据类型 * const 变量名;
注意:const修饰的是常量,数值可以改,指针的指向不能改
#include <iostream>
using namespace std;
int main() {
int num1;
int num = 10;
int * const p = #
//p = &num1;//错误,指向不可以改
* p = 20;//正确,数值能改
system("pause");
return 0;
}
3.const即修饰指针,又修饰常量
语法如下:
const 数据类型 * const 变量名;
注意:const即修饰指针,又修饰常量,数值不能改,指针的指向不能改
#include <iostream>
using namespace std;
int main() {
int num1;
int num = 10;
const int * const p = #
//p = &num1;//错误,指向不可以改
//* p = 20;//错误,数值不可以改
system("pause");
return 0;
}
指针与数组
作用:通过指针访问数组里面的元素
#include <iostream>
using namespace std;
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;//数组名相当于数组arr[0]的地址
int i;
for (i = 0; i < 10; i++) {
cout<<*p<<endl;
p++;//指针向后移动
}
system("pause");
return 0;
}
指针与函数
作用:利用指针作函数参数,可以修改实参的值
#include <iostream>
using namespace std;
void swap(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int num1 = 10;
int num2 = 20;
swap(&num1, &num2);
cout << num1 << endl;
cout << num2 << endl;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
void maopao(int* arr, int num) {
int i, j;
int temp;
for (i = 0; i <= 9; i++) {
for (j = 0; j <= 8 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (i = 0; i <= 9; i++) {
cout<<" " << arr[i];
}
}
int main() {
int arr[10] = { 12,25,6,5,45,23,96,75,24,65 };
int i = 9;
maopao(arr, i);
system("pause");
return 0;
}