1、指针定义:存放变量地址的变量。int *pi;
2、* 和 &:
*:指针运算符是间接引用操作符,产生指针所指向的数据;
&:取地址操作符(和*一起使用时,因为在另外的情况下,&也可以用作引用)
3、常量指针和指针常量
常量指针:const int* pi1; //所指向的对象只能被读取,不能被改写!
指针常量:int * const pi2; //不能修改指针
4、①指针和数组
int a[10],*p;
p=a;
定义指针指向数组时,其实是指向数组的第一个元素的地址。
②指针和函数
指针可以作为函数的参数使用。
5,以冒泡排序程序为例,编写使用函数指针实现冒泡排序的程序。程序提示用户,输入1:升序排列,传递ascending指针;输入2,:降序,传递descending指针。代码如下:
/*
**使用bubble排序,用户输入1:升序;输入2:降序
*/
#include <iostream>
#include <iomanip>
using namespace std;
void bubble(int work[],const int size,int (*compare)(int ,int));
int ascending(int a,int b);
int descending(int a,int b);
int main()
{
const int arraySize=10;
int order,counter;
int a[arraySize]={2,6,8,4,10,12,89,68,45,37};
cout<<"Enter 1 to sort in ascending order:\n"<<"Enter 2 to sort in descending order:"<<endl;
cin>>order;
cout<<"\nData items in original order\n"<<endl;
for(counter = 0; counter < arraySize;counter++)
cout<<setw(4)<<a[counter];
if(order == 1)
{
bubble(a,arraySize,ascending);
cout<<"\nData items in ascending order\n"<<endl;
}
else
{
bubble(a,arraySize,descending);
cout<<"\nData items in descending order\n"<<endl;
}
for(counter=0;counter<arraySize;counter++)
{
cout<<setw(4)<<a[counter]<<endl;
}
return 0;
}
void bubble(int work[],const int size,int(*compare)(int x,int y))
{
void swap(int *element1Ptr,int *element2Ptr);
for(int pass=1;pass<size;pass++)
for(int count =0;count<size-1;count++)
{
if((*compare)(work[count],work[count+1]))
swap(&work[count],&work[count+1]);
}
}
//交换两个数,但是形参使用的是指针啊!!
void swap(int *element1Ptr,int *element2Ptr)
{
int temp;
temp = *element1Ptr;
*element1Ptr = *element2Ptr;
*element2Ptr = temp;
}
int ascending(int a,int b)
{
return b<a;//swap if b<a
}
int descending(int a,int b)
{
return b>a;//swap if b>a
}