c++程序入門(一)——指針

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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章