1. 程式人生 > 其它 >C++學習 2 指標

C++學習 2 指標

指標:指標儲存的是資料的地址;

#include<iostream>
using namespace std;
int main()
{
    //1、定義指標
    int a = 10;
    //指標定義的語法:資料型別 * 指標變數名;
    int * p;
    //讓指標記錄變數a的地址
    p = &a;
    cout << "a的地址為:" << &a << endl;
    cout << "指標p為:" << p << endl;


    //2、使用指標
    
//可以通過解引用的方式來找到指標指向的記憶體 //指標前加 * 代表解引用,找到指標指向的記憶體中的資料 *p = 1000; //解引用指標p,找到p裡的資料,並賦值1000 cout << "a=" << a << endl; cout << "*p=" << *p << endl; return 0; }

空指標:指標變數指向記憶體中編號為0的指標;

    作用: 初始化指標變數;

    注意: 空指標指向的記憶體是不可以訪問的。0~255之間的記憶體編號是系統佔用的,因此不可訪問;

野指標:指標變數指向非法的記憶體空間;在程式中,應儘量避免使用野指標;

const修飾指標:

  const修飾指標有三種情況:(左定值,右定向 )

    1、const修飾指標 --- 常量指標 const在指標左側,指標的值不可以修改,但指向可以修改。

     eg: const int * p = &a;

       *p = 20; // 錯誤,指標指向的值不可以修改

        p = &b; //正確,指標的指向可以修改

    2、const修飾常量 --- 指標常量 const在指標右側,指標的指向不可以修改,但值可以修改。

      eg: int *const p = &a;

       *p = 20; //正確,指標指向的值可以修改

        p = &b; //錯誤,指標的指向不可以修改

    3、const即修飾指標又修飾常量 指標的指向和指向的值都不可以改

     eg: const int *constp = &a;

       *p = 20; //錯誤,指標指向的值不可以修改

       p = &b; //錯誤,指標的指向也不可以修改

指標和陣列

作用:利用指標訪問陣列中的元素

#include<iostream>
using namespace std;
int main()
{

    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    
    cout << "第一個元素:" << arr[0] << endl;

    int * p = arr;      //指向陣列的指標,arr就是陣列首地址
    cout << "指標訪問的第一個元素:" << *p << endl;

    p++;               //指標向後偏移4個位元組
    cout << "指標訪問的第二個元素:" << *p << endl;

    cout << "利用指標遍歷陣列" << endl;

    int * p2 = arr;

    for (int i = 0; i < 10; i++)
    {
        //cout << arr[i] << endl;
        cout << *p2 << endl;
        p2++;
    }

    system("pause");
    return 0;
}

指標和函式

#include<iostream>
using namespace std;

void swap01(int a , int b)         //值傳遞
{
    int temp = a;
    a = b;
    b = temp;

    cout << "swap01 a=" << a << "   " << "swap01 b=" << b << endl;       //swap01 a=20,swap01 b=10形參發生改變
}

void swap02(int * p1 , int * p2)   //地址傳遞
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;

    cout << "swap02 a=" << *p1 << "   " << "swap02 b=" << *p2 << endl;   //swap02 a=20,swap02 b=10形參發生改變
}
int main()
{
    //指標和函式
    int a = 10;
    int b = 20;

    //1、值傳遞
    //swap01(a, b);
    //cout << "a=" << a <<"            " << "b=" << b << endl;           //值傳遞 a=10,b=20 實參不發生改變(不可修飾實參)

    //2、地址傳遞
    swap02(&a, &b);
    cout << "a=" << a << "            " << "b=" << b << endl;            //地址傳遞 a=20,b=10  實參發生改變(可修飾實參)

    system("pause");
    return 0;
}