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
}