指標與結構體
- 指標
- 記憶體
- 指標
- 指標變數的定義
- 指標變數的大小
- 結構體
- 注
指標
記憶體
在介紹指標之前,先給各位介紹一下記憶體地址,先看程式:
int main()
{
int a = 1;
printf("%#0X\n", &a);
return 0;
}
當我們創建一個變數a時,首先要先記憶體申請4個位元組的記憶體空間來存放變數a的值,

運行上面程式時,我們就可以得到變數a的地址,當電腦為32位時,它就有32位的地址線,通過高低電平的控制,我們就可以產生2^32個地址編號,它們分別是:
00000000 00000000 00000000 00000000
…
11111111 11111111 11111111 11111111
這樣的編號我們把他們稱為地址,而每個地址管理著1byte的記憶體空間大小,
既然一個地址值管理1位元組的記憶體空間,那么占4個位元組的整型資料的地址是哪個地址呢?
我們通過對上面程式的除錯,通過記憶體視窗可以得知,整型資料的地址是所占記憶體空間第一個位元組空間的地址:

指標
指標變數的定義
當我們要把變數的地址存盤起來時,我們就要用到指標變數,
指標變數的定義為:是一種特殊的變數,它不同于一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址
通常我們通過 (型別)* +變數名 來定義指標變數
int main()
{
int a = 1;
int* pa = &a;
*pa = 2;
printf("%d", a);
return 0;
}
如上述程式中pa,就是指標變數,而它儲存的地址則是指標,我們通過&(取地址運算子)取a的地址,把它存盤在指標變數pa中,指標變數前的資料型別代表它存盤的地址的資料型別,這里pa存盤的就是整型資料的地址,這里的表示pa為指標變數,我們也可以通過*(解參考運算子)來通過pa訪問a,程式中就是通過pa=2;來改變a的值,運行的程式結果如下,

指標變數的大小
那指標變數的大小為多少呢?通過上文我們了解到指標變數是用來存盤變數的地址標號的,而32位的機器的地址編號的大小為4byte,因此我們可以知道,在32位的環境下,指標變數所占空間大小為4個位元組,
我們也可以通過下面程式驗證:
int main()
{
int a = 10;
char b = 'a';
char* p = &b;
int* pa = &a;
printf("%d\n", sizeof(pa));
printf("%d\n", sizeof(p));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}

同理我們也可以知道64位的環境下的指標變數所占空間大小,

結構體
C語言有很多的資料型別,但是他們都只能描述簡單的物件,而結構體就是為了用來描述復雜物件的,
比如說:你要記錄一本書的資訊,你可以定義如下結構體變數,用來記錄書的名字、價格、作者等等 ,
struct Book
{
char name[20];
int price;
char author[20];
};
我們創建的struct Book就是結構體,
在定義一個結構體變數,并對它初始化,我們就可以通過.(結構體成員運算子)來訪問結構體成員,當我們只知道結構體變數地址時 我們也可以通過 (結構體指標)+ ->+(成員名)的方式來訪問結構體成員,
struct Book
{
char name[100];
int price;
char author[100];
};
int main()
{
struct Book b1 = { "c語言程式設計",199,"譚浩強" };
struct Book* pb = &b1;
printf("%s %d %s\n", pb->name, pb->price, pb->author);//-> 結構體指標->成員名
printf("%s %d %s\n", b1.name, b1.price, b1.author);//.-結構體變數.
return 0;
}
運行結果如下:

注
創作不易,求個一鍵三連,一定會回訪的(歡迎大家指正錯誤)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286810.html
標籤:其他
上一篇:@Autowired注解,@Resource注解自動裝配【相同點】【不同點】【詳細總結】(2021-06-10)
下一篇:HelloServlet
