指標是乙個儲存計算機記憶體位址的變數。從指標指向的記憶體讀取資料稱作指標的取值。指標可以指向某些具體型別的變數位址,例如int、long和double。指標也可以是void型別、null指標和未初始化指標。
根據出現的位置不同,操作符 * 既可以用來宣告乙個指標變數,也可以用作指標的取值。當用在宣告乙個變數時,*表示這裡宣告了乙個指標。其它情況用到*表示指標的取值。
&是位址操作符,用來引用乙個記憶體位址。通過在變數名字前使用&操作符,我們可以得到該變數的記憶體位址。
這裡可以把指標、引用和值的關係模擬為信封、郵箱位址和房子。乙個指標就好像是乙個信封,我們可以在上面填寫郵寄位址。乙個引用(位址)就像是乙個郵件位址,它是實際的位址。取值就像是位址對應的房子。我們可以把信封上的位址擦掉,寫上另外乙個我們想要的位址,但這個行為對房子沒有任何影響。
指標和陣列
c語言的陣列表示一段連續的記憶體空間,用來儲存多個特定型別的物件。與之相反,指標用來儲存單個記憶體位址。陣列和指標不是同一種結構因此不可以互相轉換。而陣列變數指向了陣列的第乙個元素的記憶體位址。
乙個陣列變數是乙個常量。即使指標變數指向同樣的位址或者乙個不同的陣列,也不能把指標賦值給陣列變數。也不可以將乙個陣列變數賦值給另乙個陣列。然而,可以把乙個陣列變數賦值給指標,這一點似乎讓人感到費解。把陣列變數賦值給指標時,實際上是把指向陣列第乙個元素的位址賦給指標。
#include
int main()
int myarray[4] = ;
int *ptr = myarray;
printf("ptr位址=%ld,值*ptr=%d\n", ptr,*ptr);
ptr++;
printf("ptr位址=%ld,值*ptr=%d\n", ptr,*ptr);
ptr++;
printf("ptr位址=%ld,值*ptr=%d\n", ptr,*ptr);
ptr++;
printf("ptr位址=%ld,值*ptr=%d\n", ptr,*ptr);
以下是對一小部分的資訊管理進行了修改:
/新建乙個節點;
u = new_node(u);
printf("\n請輸入您要加入的職員的資訊:\n");
printf("\n姓名: ");
scanf("%s",u->name);
printf("\n年齡: ");
scanf("%s",u->classs);
scanf("%s",u->number);
scanf("%d%d%d",&u->score.chinese,&u->score.math,&u->score.english);
//採用頭插法將新節點的尾指標指向第二個節點(掰開)
u->next = head->next;
//將新節點放在頭節點後面;
head->next = u;
printf("\n--->新增成功!\n");
指標與鍊錶
真正有用的動態變數很少會是int,double這樣的簡單型別.相反都是一些複雜型別,比如陣列,結構體,或類.結構體或類型別的動態變數通常由乙個或多個成員變數,這些變數是指標,可將動態變數連線到其它動態變數.一.節點 在c 中,節點作為結構或類實現.struct listnode typedef li...
鍊錶與快慢指標
之前刷劍指offer遇到尋找鍊錶環的入口節點,需要使用到快慢指標,然後題一變,發現自己總是不能立馬聯想起來。總結一下快慢指標法在鍊錶中的一些常見的用處。leetcode 141 快指標每次走2步,慢指標每次走1步,如果鍊錶中有環,則兩個指標就會相遇。public boolean hascycle l...
Leetcode 快慢指標與鍊錶
1.給定乙個鍊錶,判斷鍊錶中是否有環。解釋 鍊錶中有乙個環,其尾部連線到第二個節點。ps 從例子中根本看不出來好嘛。自己理解就ok 經典思想,快慢指標,如果有環存在,快指標總會追上慢指標 python definition for singly linked list.class listnode ...