C語言_指針隨筆

    指針:

  1. 指針就是地址,地址就是指針。
  2. 地址就是內存單元的編號
  3. 指針變量是存放地址的變量(例:int* p,這裏的p就是指針變量,用於存放地址)

    指針和指針變量是兩個不同的概念:平時也把指針變量間讀爲指針,也就是說下面示例代碼中的p既是我們所說的指針,也是我們所說的指針變量。

    例:

  • 指針裏面存放的是100:這句話中,指針就是地址
  • 指針裏面存放的是地址:這句話中,指針就是指針變量

 爲什麼使用指針:

  1. 指針能直接訪問硬件(OpenGL顯卡繪圖)
  2. 快速傳遞數據(指針表示地址:如change_numbers方法調用,調用方法change_numbers函數的時候傳入進去,無法改變main方法中變量的真實值,只有傳入地址(也就是指針)才能真正改變main函數中的變量的值)
  3. 返回一個以上的值(返回一個數組或者結構體的指針)
  4. 表示複雜的數據結構
  5. 方便處理字符串
  6. 有點像面向對象


  示例代碼:


#include <stdio.h>
void pointertest();
void change_numbers(int a, int b);
void main()

{

    int a = 100;
    int b = 200;
    change_numbers(a, b);//這裏傳的是int類型的變量值,操作的是change_numbers函數中衛形參開闢出來的地址,不能真實的改變main方法中的a,b的值。
    printf("a = %d \nb = %d \n", a, b);

    change_numbers2(&a, &b);//這樣就是直接把a,b在main方法中開闢的地址傳過去,是直接操作main函數中a,b所在的地址,能直接改變main函數中a,b的值。

   int i = 10;
    int* p; //指針的聲明,這時候會開闢出一塊內存,也就是一個地址,但是這塊內存中沒有存放東西(int*類型)

    
    //C語言中沒有String類型,可用指針返回一個字符串
    char* h = "Hello World !";
    printf("array : %s\n", h);


    p = &i;//指針的初始化,爲上面開闢出來的內存進行賦值,指向了i這個整數所在的地址
    printf("*p = %d \n", *p);
    *p = 100;//這裏的p就是指針(int*類型)(其實它叫指針變量,只是平時我們 習慣性叫它指針),*p指的是p指向的地址中的值(int類型)
    printf("更改*p的值!\n");
    printf("*p = %d \n", *p);
    printf("i = %d \n", i);
    printf("修改i的值!\n");
    i = 50;
    printf("*p = %d \n", *p);
    printf("i = %d \n", i);

}

void change_numbers(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}


void change_numbers2(int* a, int* b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

運行結果:

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