很重要!!!
1、指针的定义和使用 通过指针间接访问内存,用指针记住地址编号 语法:数据类型 * 变量; 定义完之后,要获得变量的地址 语法:指针变量 = & 变量; &是取址符号。 解引用:找到指针指向的内存中的内容(数值) 语法:*p = 表达式;
2、指针所占的内存空间 指针实际存的是地址 32位操作系统,指针变量占用4个字节(64位下占用8位) sizeof( 指针变量 ) = 4/8; 与指针的数据类型没有关系
#include<iostream>
using namespace std;
int main()
{
int a = 10;
cout << "a = " << a << endl;
int* p = &a;
*p = 250;
cout << "a = " << a << endl;
cout << "The size of int point is: " << sizeof(int*) << endl;
cout << "The size of p point is: " << sizeof(p) << endl;
cout << "The size of float point is: " << sizeof(float*) << endl;
cout << "The size of double point is: " << sizeof(double*) << endl;
cout << "The size of char point is: " << sizeof(char*) << endl;
system("pause");
return 0;
}
3、空指针 内存空间编号为0的内存 空指针用于指针变量初始化 空指针不可以进行访问操作 0~255的内存编号是系统占用的,不能更改 语法:* p = NULL;
4、野指针 指针变量指向的是非法空间 尽量避免野指针,也不要访问野指针 例如: int * p = (int **) 0X1100;
5、const常量指针 (1)const修饰指针:常量指针 语法:const int *p = & a; 特点:指针的指向可以修改,指针指向的值不可以修改 (2)const修饰常量:指针常量 语法:int *const p = & a; 特点:指针的指向不可以改,指针指向的值可以修改 (3)const既修饰指针又修饰常量 特点:指针的指向和指向的值都不可以修改
#include <iostream>
using namespace std;
int main()
{
int a = 10;
int b = 20;
cout << "a和b分别是: " << a << " " << b << endl;
a = 10;
b = 20;
const int* p1 = &a;
p1 = &b;
cout << "a和b分别是: " << a << " " << b << endl;
cout << " *p1 = " << *p1 << endl;
a = 10;
b = 20;
int* const p2 = &a;
*p2 = 50;
cout << "a和b分别是: " << a << " " << b << endl;
cout << " *p2 = " << *p2 << endl;
a = 10;
b = 20;
const int* const p3 = &a;
cout << "a和b分别是: " << a << " " << b << endl;
cout << " *p3 = " << *p3 << endl;
system("pause");
return 0;
}
6、利用指针访问数组 代码:利用指针遍历数组的所有值
#include <iostream>
using namespace std;
int main()
{
int arr[10] = { 11,22,33,44,55,66,77,88,99,110 };
int* p = arr;
for (int i = 0; i < 10; i++)
{
cout << "数组的第"<< i+1 << "个元素是:" << *p << endl;
p++;
}
system("pause");
return 0;
}
7、指针与函数 讨论:指针作为参数送入函数中情况如何? 地址传递:指针作为参数送入函数中 地址传递可以改变实参
#include <iostream>
using namespace std;
void swap(int* p1, int* p2)
{
int temp = *p2;
*p2 = *p1;
*p1 = temp;
}
int main()
{
int a = 10;
int b = 100;
cout << "a和b分别是: " << a << " " << b << endl;
swap(&a, &b);
cout << "a和b分别是: " << a << " " << b << endl;
system("pause");
return 0;
}
总结:不想改变实际参数——值传递,改变实际参数——地址传递
8、编程案例: 封装一个函数,利用冒泡排序,实现对数组的升序排列
#include <iostream>
using namespace std;
void Bubble_Sort(int* arrp,int len)
{
int temp = 0;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (arrp[j] > arrp[j + 1])
{
temp = arrp[j + 1];
arrp[j + 1] = arrp[j];
arrp[j] = temp;
}
}
}
}
void Print_Array(int* p,int len)
{
for (int i = 0; i < len; i++)
{
cout << *p;
p++;
cout << endl;
}
}
int main()
{
int arr[12] = { 55,69,75,12,95,36,4,18,222,8,66,48 };
int lenth = sizeof(arr) / sizeof(arr[0]);
cout << "这个数组的长度是: " << lenth << endl;
Bubble_Sort(arr, lenth);
Print_Array(arr, lenth);
system("pause");
return 0;
}
显示的结果是:
这个数组的长度是: 12
4
8
12
18
36
48
55
66
69
75
95
222
请按任意键继续. . .
|