網站首頁 編程語言 正文
本節目標
理解內存與地址的相關概念,初步掌握指針的定義與使用,理解結構體的概念,掌握其基本的使用及訪問方法。
初識指針
1、內存與地址
內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的。
*所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內存單元的大小是1個字節。 *同時為了能夠有效的訪問到內存的每個單元,就給內存單元進行了編號,這些編號被稱為該內存單元的地址。
2、變量的地址
變量是創建內存中的(在內存中分配空間的),每個內存單元都有地址,所以變量也是有地址的。
取出變量地址如下:
#include <stdio.h>
int main()
{
int num = 10;
#//取出num的地址
//注:這里num的4個字節,每個字節都有地址,取出的是第一個字節的地址(較小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}
3、指針變量
*指針變量:用來存放指針的變量(指針就是地址)。
#include<stdio.h>
{
int num = 10;
int *p;//p為一個整形指針變量,int*是p的類型,其中*代表p是一個指針,int表示p指向的變量的類型是int的。
p = #
return 0;
}
4、指針的使用
#include <stdio.h>
int main()
{
int num = 10;
int* p = #
*p = 20;
printf("%d\n", num);
return 0;
}
int* p = &num :定義一個指針變量 p,并將 num 的地址賦給 p,這時 p 里面存放的就是 num 的地址,也就是說 p 指向了 num;
*p = 20 :* 是解引用操作符,*p 就是對 p 進行解引用,就是通過 p 里面存放的 num 的地址找到 num,并將 num 空間中存放的數據10修改為20;
5、指針變量的大小
#include <stdio.h>
int main()
{
//%zu:用來打印無符號整型,與 %u 相似
printf("%zu\n", sizeof(char*));
printf("%zu\n", sizeof(short*));
printf("%zu\n", sizeof(int*));
printf("%zu\n", sizeof(double*));
return 0;
}
*所以:指針大小在32位平臺是4個字節,64位平臺是8個字節。(本質是因為不同平臺下的地址線數量不同)
初識結構體
1、什么是結構體
結構體是C語言中一種重要的數據類型,該數據類型由一組稱為成員(或稱為域,或稱為元素)的不同數據組成,其中每個成員可以具有不同的類型。結構體通常用來表示類型不同但是又相關的若干數據。
結構體類型不是由系統定義好的,而是需要程序設計者自己定義的。C語言提供了關鍵字struct來標識所定義的結構體類型。
關鍵字struct和結構體名組合成一種類型標識符,其地位如同通常的int、char等類型標識符,其用途就像 int 類型標識符標識整型變量一樣可以用來定義結構體變量。定義變量以后,該變量就可以像定義的其他變量一樣使用了;成員又稱為成員變量,它是結構體所包含的若干個基本的結構類型,必須用“{}”括起來,并且要以分號結束,每個成員應表明具體的數據類型。
2、結構體的定義
下面我們以學生來舉例:假設一個學生包括姓名、年齡、性別、學號五個信息,為了能夠整體的描述一個學生,我們可以定義一個結構體類型。
struct Stu
{
char name[20];//名字
int age; //年齡
char sex[5]; //性別
char id[15]; //學號
};
3、結構體的使用
#include<stdio.h>
int main()
{
//定義結構體變量并對其進行初始化
struct Stu s = { "張三",18,"nan","220210101" };
//兩種結構體訪問操作符
// . 操作符
printf("%s\t%d\t%s\t%s\n", s.name, s.age, s.sex, s.id);
// -> 操作符
struct Stu* ps = &s; //定義結構體指針變量 ps 并將 s 的地址賦給 ps
printf("%s\t%d\t%s\t%s\n", ps->name, ps->age, ps->sex, ps->id);
return 0;
}
注意:-> 操作符只能在已經有結構體指針的情況下才能使用。
原文鏈接:https://blog.csdn.net/m0_62391199/article/details/124141089
相關推薦
- 2022-10-01 Python?Color類與文字繪制零基礎掌握_python
- 2022-07-16 Spring MVC @ModelAttribute注解
- 2022-12-21 Python?eval()和exec()函數使用詳解_python
- 2022-11-07 go?分布式鎖簡單實現實例詳解_Golang
- 2022-07-29 使用React?Router?v6?添加身份驗證的方法_React
- 2022-04-21 python的變量和運算符你都知道多少_python
- 2023-02-01 Bat腳本-Call,Start,直接調用,goto?四種方式調用批處理_DOS/BAT
- 2022-10-23 C++繼承與菱形繼承詳細介紹_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支