6指针
6.1指针的定义和使用
指针就是地址 &表示取地址,&i 是取 i 变量所在的地址编号嘛 pi = &i 就是把 i 地址的编号赋值给 pi
#include <iostream>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i = 30;
std::cout << "&i = "<< &i << std::endl;
std::cout << "i = " << i << std::endl;
int *pi = &i;
std::cout << "*pi = " << *pi << std::endl;
system("pause");
return 0;
}
*表示根据地址找出对应内存单元的数据 *pi 就是pi 所指地址的内容 。例如上面pi存放的是变量i的地址,*p就是地址对应的变量i所存放的数据,也就是30。 int p 可以把int看作一种数据类型,p看作变量
6.2空指针和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
[注]:空指针指向的内存是不可以访问的 野指针:指针变量指向非法的内存空间
int main() {
int * p = NULL;
cout << *p << endl;
system("pause");
return 0;
}
int main() {
int * p = (int *)0x1100;
cout << *p << endl;
system("pause");
return 0;
}
6.3const修饰指针
const修饰指针有三种情况:
- const修饰指针 — 常量指针 (const int * p1)
- const修饰常量 — 指针常量 (int * const p1)
- const既修饰指针,又修饰常量 (const int * const p3) :
int main() {
int a = 10;
int b = 10;
const int * p1 = &a;
p1 = &b;
int * const p2 = &a;
*p2 = 100;
const int * const p3 = &a;
system("pause");
return 0;
}
看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量
6.4指针,数组和函数
6.4.1指针和数组
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = arr;
cout << "第一个元素: " << arr[0] << endl;
cout << "指针访问第一个元素: " << *p << endl;
for (int i = 0; i < 10; i++)
{
cout << *p << endl;
p++;
}
system("pause");
return 0;
}
6.4.2指针和函数
作用:利用指针作函数参数,可以修改实参的值
void swap1(int a ,int b)
{
int temp = a;
a = b;
b = temp;
}
void swap2(int * p1, int *p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main() {
int a = 10;
int b = 20;
swap1(a, b);
swap2(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0;
}
6.4.3指针,数组和函数
egg:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
void bubbleSort(int * arr, int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; 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,6,9,1,2,10,8,7,5 };
int len = sizeof(arr) / sizeof(int);
bubbleSort(arr, len);
printArray(arr, len);
system("pause");
return 0;
}
总结:当数组名传入到函数作为参数时,被退化为指向首元素的指针
|