北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

基本概論 Basic concepts.
电子成绩单项目实现.
项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计.
C++程序设计 王希 图书馆三楼办公室.
C语言程序设计 第十二章 位运算.
第十一章 結構.
程式設計 博碩文化出版發行.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。
101北一女中 資訊選手培訓營 快速排序函式qsort() Nan.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
第9章 自訂資料型態 – 結構 9-1 結構資料型態 9-2 結構陣列 9-3 指標與結構 9-4 動態記憶體配置 9-5 聯合資料型態
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
C語言簡介 日期 : 2018/12/2.
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
C语言程序设计 李祥.
101北一女中 資訊選手培訓營 圖論基礎 Nan.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
Chapter 7 指標.
C语言 程序设计基础与试验 刘新国、2012年秋.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第一單元 建立java 程式.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言程序设计.
OOP6 結構Struct 黃兆武.
輸入&輸出 函數 P20~P21.
Java變數 2014/6/24.
第十章 指標.
第1章 绪论 北京师范大学 教育技术学院 杨开城.
本节内容 字节对齐.
101北一女中 資訊選手培訓營 深度優先搜尋(DFS)的進階應用 Nan.
第11章 位运算 为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。 所谓位运算是指,按二进制位进行的运算。 11.1 数值在计算机中的表示 11.2.
保留字與識別字.
指標
Java 程式設計 講師:FrankLin.
第三章 数据抽象.
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C qsort.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
北一女中 資訊選手培訓營 圖論基礎 By Nan( ).
第3章 数据类型、运算符与表达式.
第二章 类型、对象、运算符和表达式.
第二章 基本数据类型 ——数据的表示.
Review 1~3.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
陣列與結構.
本节内容 指针数组与数组指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 指针类型.
第七章  数 组.
結構、檔案處理(Structure, File)
變數、資料型態、運算子.
Introduction to the C Programming Language
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
Programming & Language Telling the computer what to do
變數與資料型態  綠園.
Array(陣列) Anny
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
安排座位.
C语言基础学习 从外行到入门.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

北一女中 資訊選手培訓營 妳不可不了解的指標 Nan

指標, 是一個神祕 而複雜的存在。

指標表示: 妳誤會我了啦 我很單純的′ ▽`)

變數 說到底…指標不過也就只是個…. int* int double float char * unsigned char … 長浮點數 記憶體位置, 目標是一個int 變數 int* 整數 double int float char * unsigned char …

5 int num = 5; int* ptr = &num; 做dereference: *ptr  num 0xFFACBB00 叫我記憶體 0xFFACBB00 5 (4bytes) 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 … int* ptr = &num; 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 … 叫我記憶體 0xFF968C00 0xFFACBB00 做dereference: *ptr  num

如果是指標的指標… int** ptr_ptr = &ptr; 做dereference: *ptr_ptr  ptr 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 ptr_ptr int ** 0xFF9A8C04 叫我記憶體 0xFF9A8C04 0xFF968C00 做dereference: *ptr_ptr  ptr

所以對指標做運算的意思是: 對記憶體位置做運算… int * ptr3 = ptr + 3; 3 * sizeof(int) + 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 ptr3 0xFF968C04 叫我記憶體 0xFF968C00 0xFFACBB00 = 0xFFACBB0C 叫我記憶體 0xFF968C04 0xFFACBB0C

陣列其實也是個指標… 不過不能改(const) int num[3]; num[0] = 5; num[2] = -10; 變數名稱 變數型態 記憶體位置 num int* const 0xFFACBB00 … num[2]  *(num + 2) 叫我記憶體 0xFFACBB00 5 0xFFACBB04 0xFFACBB08 ? -10

5 ? -10 Q: printf(“%d”, ptr[1] ); A: -10 int* ptr = num + 1; 叫我記憶體 0xFFACBB00 5 ? -10 0xFFACBB04 0xFFACBB08 變數名稱 變數型態 記憶體位置 num const int* 0xFFACBB00 ptr int * 0xFF968C00 … int* ptr = num + 1; 叫我記憶體 0xFF968C00 0xFFACBB04 Q: printf(“%d”, ptr[1] ); A: -10

練習時間! 這樣會輸出什麼呢? char str[] = “hello world”; char *ptr = str + 3; printf(“%s\n”, ptr ); printf(“%c\n”, ptr[2]); 這樣會輸出什麼呢?

現在,有沒有覺得指標不再是一團迷霧了呢?

再多講一點點: 結構(structure)!

結構的語法大概長這樣… struct STURCT_NAME{ TYPE FIELD_NAME; … }; int main(){ //…

struct student *ptr = &me; me.id = 5; me.weight = 57.0; int id; double weight; double height; }; int main(){ struct student me; struct student *ptr = &me; me.id = 5; me.weight = 57.0; me.height = 166.5; printf(“%d, %.2lf, %.2lf\n”, ptr->id, ptr->weight, ptr->height); }; 如果是變數本身要存取  用點點 如果要透過指標存取  用箭號-> ptr->id的效力 等同於(*ptr).id