一.變量:
聲明一個變量系統是沒有給這個變量分配內存空間的:
例:
int j;//編譯的時候是沒有分配內存空間的 int i=3;//計算機在編譯的時候就會給這個i分配4個字節的內存空間
二.malloc動態分配內存地址:
回想一下:我們在程序中存儲一個整數10;除了使用int a;在內存中申請一塊區域來存儲,還有一種方法:
malloc(4); //從內存中申請4個字節大小的內存存放整數10
在C中經常看到這樣的寫法:
(int *)malloc(sizeof(int)); //sizeof(獲取int類型所占的字節數)
//(int *)表示申請的這些字節數用於存放int類型的整數
例:
#include <stdio.h> #include <stdlib.h> int main() { int b; b=(int)malloc(sizeof(int)); //沒有這句話,變量b 是不占內存的,printf輸出就會空指針異常;有這句話,就輸出的申 請的內存地址 printf("%d",b); system("pause"); return 0; }
三.C中的*和&:
*:代表取內存中的值(*還有乘法運算,這個就不多解釋了)
&: 代表獲取的是變量的地址
**:二級指針(就是地址里面存放第三個變量的地址地址)
->:結構體指針運算符(用於訪問結構體內部成員的)
例(二級指針的例子):
#include <stdio.h> #include <stdlib.h> int main() { int a[]={1,2,3,4,5};//這個數組里存入的是具體的數據 int *num[]={&a[0],&a[1],&a[2],&a[3],&a[4]};//這個數組里面就是全部存的數內存地址,並不是數據 int **p,i; p=num; for (i = 0; i < 5; i++)//注意這里,C語言是不能在這里進行變量的定義的如:int i { printf("%d\t",**p);//這里的p表示num數組的首地址,*p表示num[1]的值,也就是a[0]的地址,**p就是值了 p++;//指針向下移一格 } system("parse"); return 0; }
四.鏈表(遍歷):
根據以上知識點,就可以進行簡單的鏈表的遍歷了
例:
#include <stdio.h> #include <stdlib.h> struct note { int data; struct note *next; }; int main() { struct note *head,*p,*q,*t;// int i,n,a; scanf("%d",&n);//有多少個數 head=NULL;//頭指針初始化為空 for (i = 0; i < n; i++)//循環讀取n個數 { scanf("%d",&a); p=(struct note *)malloc(sizeof(struct note));//動態申請一個節點的空間,存放節點 p->data=a;//將數據存入data中 p->next=NULL;//設置當前指針的后續指針指向空 if(head==NULL) { head=p;//如果這是第一個創建的節點,就讓頭指針指向這個 } else { q->next=p;//如果不是第一個節點,就讓前一個的后續指針指向當前節點 } q=p;//在將q也指向當前節點 } t=head; while (t!=NULL) { printf("%d\t",*t); t=t->next; //繼續下一個節點 } system("pause");
return 0; }
五.后記:
以上只是對鏈表進行了遍歷,鏈表數據的添加刪除,后續繼續更新
