C——指標和結構體(1)
- 一、指標到底是個什么牛馬?
- 1.說指標之前先來了解下——記憶體
- 2.記憶體用來干什么
- 3.指標
- 二、指標怎么使用
- * ——解參考運算子
- 三、指標的大小
- 四、結構體
- 總結
——已經是第二次學C語言了,第一次學就是在指標這塊遇到了問題,現在回過頭再來學習,還是有必要自己整理一些干貨的
****不是詳細版本 ------僅方便理解****
一、指標到底是個什么牛馬?
1.說指標之前先來了解下——記憶體

由于我們的電腦有32位/64位兩種,拿32位來舉例子
32位——32根地址線(也就是電線,給他們通電,產生0/1)
于是乎就會產生
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000100
00000000000000000000000000001000
,,,
11111111111111111111111111111111
這種32個一串的地址一共有2^32 個也就是2^32 個bit,而1個位元組=8bit,所以就會有(2^32)/8個記憶體單元
2.記憶體用來干什么
當然是用來存東西,舉個栗子

然后呢,假設這4個位元組的記憶體空間編號為501 502 503 504

問題來了,那a到底是哪個格子呢?讓代碼運行起來用監視器查看一下


監視器一查看就會發現&a取到的其實是第一個位元組的地址,同時還發現,取地址是從低地址往高地址取的(從第一位往后,因為只要找到了第一位,后面的就依次+1即可),也就是如圖

3.指標
接著上邊,將a的地址給它列印出來,這里注意一個問題,因為每次的記憶體都是重新分配的,所以每一次列印出來的地址是不一樣的

指標的定義
& 取地址運算子``
a 整型變數
&a 對a取地址 即 &a表示a的地址
p=&a把一個地址放進p中,地址=指標,所以p是一個指標變數
定義一個指標變數的語法為:int *p=&a;

為什么要這樣定義

舉個栗子
char ch = 'w';//ch是個char型別變數
char* p = &ch;//所以要用char*
地址和變數的關系請看圖

存放10的地址就是指標,地址就好比你家門牌號 即————地址=指標

二、指標怎么使用
* ——解參考運算子
要想使用指標,就要用到解參考運算子,也就是 “ * ”號
int a =10;//先把10賦值給a
int* p=&a;//把a的地址存于指標p
*p=20;//通過使用解參考運算子,通過a的地址找到a,把20賦給a
printf("%d\n",a);//列印出來的a就是20
三、指標的大小
列印出各種型別的指標的長度
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(long*));
printf("%d\n", sizeof(float*));
printf("%d\n", sizeof(double*));
return 0;
}
運行結果為

為什么全都是4,那是因為在32位的機器上,一個記憶體單元的大小為1byte=8bit,而4個位元組(byte)=32個bit,上栗子``
00000000000000000000000000000001//這是一個32位地址
而char* short* int* long* float* double* 定義的是一個指標變數
指標變數里存放的也就是一個地址,所以說只要是地址,就是4個位元組(64位的電腦,則為8個位元組)
地址大小只取決于平臺
四、結構體
一個復雜物件,栗如:
學生:
名子+年齡+性別+身高
—————————————————————————————————————
當遇到這種物件時,基本型別已經無法表示,這時候就需要用到結構體
#include <stdio.h>
struct Student//宣告一個學生型別
{
char name[20];
int age;
char sex[5];
char id[12];
};//注意這里還有個分號不要忘了
int main()
{
//創建結構體變數
struct Student s1={"張三",20,"男","20200506"};
struct Student s1={"李四",20,"女","20200506"};
return 0;
}
語法格式就是這個樣子,依葫蘆畫瓢,用就完了
結構體變數如果要訪問成員變數,就要用 “.”運算子
printf("名字:%s 年齡:%d 性別:%s 學號:%s", s1.name, s1.age, s1.sex, s1.id);//即可訪問并列印各個成員變數
同樣,可以用指標來訪問變數成員
struct Student*p=&s1;
printf("名字:%s 年齡:%d 性別:%s 學號:%s", (*p).name, (*p).age, (*p).sex, (*p).id);
printf("名字:%s 年齡:%d 性別:%s 學號:%s", p->name, p->age, p->sex, p->id);
兩種方法都是可以的,都一樣
“.”————————結構體變數.成員名
“->”————————結構指標->成員名
總結
本篇只對指標和結構體做簡單介紹,方便理解為主,歡迎指出錯誤
//創作不易,如果覺得可以,三連走起來~看到會回訪//
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286983.html
標籤:其他
上一篇:炸裂!手摸手教你如何吃透一個 Java 專案,yyds
下一篇:初識C語言總結3
