[輝哥帶我學數據結構-1] 輝哥的自我介紹

大家好,這學期開了一門新課叫做數據結構,c語言版,但是c語言對我來說過於古老,因爲之前參加了校ACM集訓,因此對c++還是比較會用的,c語言一般也不用,但是課程還是能聽懂了...

以上都是我的廢話,那我們就開始學習美妙的數據結構吧。

第一節課:指針與結構體

指針就是指向一個對象的變量,這個變量存儲的數據就是這個對象的地址。

比如說int a; a這個變量就在系統內部分配了一個空間,由於這個變量是int類型,那麼這個變量所佔有的地址是四個,或者說這個變量佔4個格子(也就是四個字節),這四個格子的地址分別是FF70、FF71、FF72、FF73。那麼這個變量的地址呢?這個變量的地址就是FF70。

那麼你可能會問:只有一個內存塊的地址怎麼指向佔有四個字節的變量呢?

這個時候我們就會引入一個新的概念,那就是指針變量的更加細分的類型

我們知道在c語言中會有很多種變量,也會有這些變量的指針指向這些變量,因此對於某種類型的變量,也會有這種類型的指針變量,或者叫做對應這種變量類型的指針變量。比如說char類型的變量,所對應的指針的類型就是char*類型;對於int類型的變量,所對應的指針類型就是int*類型。

取地址符:&

對於變量a,它的地址就是&a,代碼示例如下:

int a;
int *p;//定義整數型指針類型變量p
p = &a;//將a的地址給p

實例開發:自建swap函數

//第一種寫法
void swap(int &a, int &b){
    int t = a;
    a = b;
    b = t;
}
int main(){
    int a = 3, b = 4;
    swap(a, b);
}
//第二種寫法
void swap(int *a, int *b){
    int p = *a;
    *a = *b;
    *b = p;
}
int main(){
    int a = 3, b = 4;
    swap(&a, &b);
}

第一種在函數中使用了取地址符,如果形參使用了取地址符那麼這個函數就會改變這個傳入的參數。

第二種函數實際上傳入了地址,實質就是改變兩個數的地址指向,如果p表示一個數的地址,那麼*p就表示這個地址指向的數,對*p賦值,沒有改變*p在內存中的位置,但是改變了*p的值。

結構體:

結構體就是一種數據類型

結構體內的元素可以你自己構建,原則上結構體內部不能加入類型爲自身的結構體,但是可以加入自身類型的指針變量元素(後續會提到鏈表,在這裏瞭解一下即可)

//書上以及輝哥寫的代碼
typedef struct LNode{
    int num;
    int data;
    string str;
}LNode;

//我在算法競賽中經常用的寫法
struct LNode{
    int num;
    int data;
    string str;
};

其中LNode就是一個你定義的類型,之後你可以直接用此類型去定義你想定義的變量。如:

LNode a;//在這裏a就變成了一個結構體類型的變量
LNode b[10];//定義了一個含有10個元素的數組,每個元素的類型是LNode類型

如果你想去訪問或者更改結構體內部的元素應該怎麼做呢?

a.num = 1;
a.data = 2;
a.str = "i love 輝哥!";

那麼,如何通過指針對結構體進行訪問呢?(假如你已經有一個指向這個結構體的指針p)

p = &a;
p->num = 1;//訪問a中的num元素
(*p).data = 2;//訪問a中的data元素

以上有兩種形式可以對其進行訪問。

end~~~~~

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