指针
代码示例
#include<iostream>
using namespace std;
int main()
{
//定义一个指针:1.创建变量 2.创建指针 3.建立关系
int a = 10;
//指针定义语法:数据类型 *指针变量名;
int * p;//也可 int *p = &a;
//让指针变量记录a的变量地址
p = &a;
cout << "a的地址为" << &a << endl;
cout << "指针p为" << p << endl;
//使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*,即为解引用,找到指针指向内存中的数据,如*p
*p = 1000;
cout << "a=" << a << endl;
cout << "*p=" << *p << endl;
cout << "sizeof(int *)=" << sizeof(int *) << endl;
cout << "sizeof(double *)=" << sizeof(double *) << endl;
cout << "sizeof(char *)=" << sizeof(char *) << endl;
//32位操作系统下,存指针均占用4字节
//空指针:用于给指针变量进行初始化,空指针是不能进行访问的
int * p1 = NULL;//注意不允许访问,即不能解引用cout<<*p1<<endl;
//野指针
int *p2 = (int *)0x1100;//注意不允许访问,即不能解引用cout<<*p2<<endl;
//程序中要避免野指针
//常量指针 const修饰的是指针 const int * p = &a;
//该指针指向地址可改,但指向的内容不可改,即*p不可改,但p可改
//指针常量 int * const p = &a;
//该指针指向的值可改,但指向的地址不可改,即p不可改,但*p可改
//const既修饰指针,又修饰常量 const int * const p = &a;
//指针的指向 与 指针的值 均不能改变
system("pause");
return 0;
}
指针与数组
//指针与数组
//利用指针访问数组数据
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int * p = &arr[0];
cout << *p << endl;
int i = 1;
while ( i < (sizeof(arr)) / (sizeof(arr[0])) )
{
p++;
cout << *p << endl;
i++;
}
指针与函数
void swap01(int num1, int num2)//值传递,不可改变实参
{
int swap_temp1;
swap_temp1 = num1;
num1 = num2;
num2 = swap_temp1;
cout << num1 << " " << num2 << endl;
}
void swap02(int *p1, int *p2)//地址传递,可以改变实参
{
int swap_temp2;
swap_temp2 = *p1;
*p1 = *p2;
*p2 = swap_temp2;
cout << *p1 << " " << *p2 << endl;
}
※综合案例代码(封装函数,冒泡升序数组)
void swap03(int len, int *arr)
{
for (int i = 0; i < len - 1; i++)//轮数=元素个数-1
{
for (int j = 0; j < len - i - 1; j++)//轮内比较次数=元素个数-轮数-1
{
if (arr[j] < arr[j + 1])
{
int swap_temp3 = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = swap_temp3;
}
}
}
}
void print(int len,int *arr)
{
for (int print_i = 0; print_i < len; print_i++)
{
cout << arr[print_i] << endl;
}
}
int main()
{
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
int len = (sizeof(arr)) / (sizeof(arr[0]));
swap03(len, arr);
print(len, arr);
system("pause");
return 0;
}