指標 Pointers.

Slides:



Advertisements
Similar presentations
Incomplete Structs struct B; struct A { struct B * partner; // other declarations… }; struct B { struct A * partner; // other declarations… };
Advertisements

Dynamic Allocation and Linked Lists. Dynamic memory allocation in C C uses the functions malloc() and free() to implement dynamic allocation. malloc is.
Double Linked List Operations Dr. David Tsai 2010/4/12.
CSCE 3110 Data Structures & Algorithm Analysis
Singly Linked List BTECH, EE KAZIRANGA UNIVERSITY.
C’ POINTERS Basic&Examples. Q:what’s the output? int array[] = { 45, 67, 89 }; int *array_ptr = array; printf(" first element: %i\n", *(array_ptr++));
Data Structure Lecture-5
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
Dynamic Memory Allocation in C.  What is Memory What is Memory  Memory Allocation in C Memory Allocation in C  Difference b\w static memory allocation.
Class operators. class polynomial class polynomialpolynomial class polynomial { protected: int n; double *a; public: polynomial(){}; …..; // constructor.
Structure and User-Define Type struct tag {members;…;} variable; typedef old_type new_type;
Pointer, malloc and realloc 1. Name entered was 6 char, not enough space to put null terminator 2 Array of char.
Growing Arrays in C By: Victoria Tielebein CS 265- Spring 2011.
6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
I/O FUNCTIONS 輸入 與 輸出. #include int fclose(FILE *); int feof(FILE *); int fflush(FILE *); int fgetc(FILE *); getchar(); char *fgets(char*, int, FILE*);
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
Implementing Data Structures
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章 CS340100, NTHU Yoshi.
五小專案 黃詩晴 章乃云. 目錄 計算機 智慧盤 拼圖 記憶大挑戰 數學題庫 心得 參考文獻.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
MATLAB 程式設計 第 11 章 多維陣列 多維陣列的定義 在 MATLAB 的資料型態中,向量可視為 一維陣列,矩陣可視二維陣列,對於維 度 (Dimensions) 超過 1 的陣列則均可視 為「多維陣列」 (Multidimesional Arrays , 簡稱 N-D Arrays)
Chapter 07 低階程式語言.
P. 1 Pointer( 指標 ) o 指標的宣告及給值 宣告 : 型態 * 指標變數名稱 給值 : 指標變數 = 一般變數位址 宣告時給值 : 型態 * 指標變數 = 一般變數位址 #include void main() { int a=5; int *p; int *q=&a; p=&a; printf(“a=%d.
資料結構實習-四.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
Introduction to pointers in C/C++. Pointers 特殊變數 存放變數在記憶體中的位址 MinGW C++ 中佔用 4 bytes 間接定址取執法 位址 指標變數 變數內容 變數.
第九章 結構. 結構的宣告 結構 它是由許多不同 ( 或相同 ) 資料型態的變數所組成的 集合,通常利用結構標籤稱呼此集合 struct student { char *name; int score; }; struct 為保留字,表示結構的宣告開始 結構項目需定義於大括號「 { } 」內 結尾需加上分號.
最新計算機概論 第 5 章 系統程式. 5-1 系統程式的類型 作業系統 (OS) : 介於電腦硬體與 應用軟體之間的 程式,除了提供 執行應用軟體的 環境,還負責分 配系統資源。
Chapter 12 Pointers and Dynamic Arrays. Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 2 Overview Pointers (12.1) Dynamic Arrays.
Introduction to C Language ─ C 語言資料型態. 大綱 常數與變數 整數資料型態與變數宣告 浮點數資料型態與變數宣告 字元資料型態與變數宣告 資料的大小 Homework.
第十章 再論結構. 指標與結構的關係 /* File name: ex10-1a.c */ #include int main() { struct student { char *name; int score; }; struct student st= {"Brian", 97}; struct.
1 Excel 講授內容 ( 進階 ) 授課教師 : 吳槐桂 最後更新 : 2008/05/01.
資料結構實習-一 參數傳遞.
第六章 陣列.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
Chapter 5 pointers and arrays Speaker: Lung-Sheng Chien.
A[0] a[1] pa ???? *pa ppa *ppa Address:4 byte Double:8 byte.
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
Pointer and Array 指標 與 陣列 double *a, b[10]; char name[80], *np;
Windows Processing Design1 Chapter 1 C/C++ 概論 畫面輸出與鍵盤輸入 程式流程 程式流程的迴圈 函數的基礎 指標與陣列 字串 類別 利用 BCB 開發程式.
1999/11/31NCU ME DCSLab1 自動控制實驗 Lab6 Root Locus. 1999/11/31NCU ME DCSLab2 二階系統的極點位置 n 標準二階系統的特性方程式 s 2 +2ξωs+ω 2 =0 , 且 0
資料型態名稱用途儲存空間儲存值範圍 short 短整數儲存較小的 整數 2 bytes-32,768~32,767 Int 整數儲存整數 16 位元 : 2 bytes 32 位元 : 4 bytes 16 位元 : 32,768~32, 位元 : -2,147,483,648 ~ 2,147,483,647.
Chapter 11 Strings and Vectors. Copyright © 2005 Pearson Addison-Wesley. All rights reserved. Slide 2 Overview An Array Type for Strings (11.1) The Standard.
本章重點 2-1 有序串列(Ordered List) 2-2 介紹陣列(array) 2-3 矩陣(matrix)的應用
Chapter 6 Arrays, Pointers, and Strings
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
第 3 章 學習 80x86 指令. 本章提要 80x86 的指令格式與分類 搬動資料的指令群 算術指令群、邏輯運算指令群 平移與旋轉指令 流程控制與旗標控制指令 字串處理指令群 I/O 指令群、 CPU 控制指令群.
連續隨機變數 連續變數:時間、分數、重量、……
VHDL 的物件 (Objects) 宣告 物件種類 (1) 訊號 (2) 變數 (3) 常數 VHDL 的物件 (Objects) 宣告語法 : [ := ] ;
I/O of C and C++. printf and scanf of C Should add printf (“control string”, exp1, exp2,…) Scanf(“control string”, &var1, &var2,…)
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
第 8 章 記憶體指標. 8.0 變數、數值、位址 8.1 指標與變數 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。
Data Structures (1st Exam). 1.[5] Suppose there are only two constructors for a class, one that passes in a single integer parameter called amount, for.
Dynamic Memory Allocation. Domain A subset of the total domain name space. A domain represents a level of the hierarchy in the Domain Name Space, and.
> Database 實驗室專用程式語言 Java. Language - 2 Outline Programming language chaos 一小時精通 Java 不是夢 Java 環境設定.
© Copyright by Deitel 1 Chapter 7 – Pointers ( 指標 ) Outline 7.1Introduction 7.2Pointer Variable Definitions and Initialization 7.3Pointer Operators 7.4Calling.
STRUCTURE 為一種複合式的資料型態,可用來把相關的資料組織 成為有意義的資料單元。 名片: name age tel namecard : char name[10]; int age; char tel[10] char [60]
朝陽科技大學資管系 李麗華 第四章 鏈結串列 Linked List Fools look to tomorrow, wise men use tonight.
國際能源教育資訊 師大工教系 能源教育推廣組. What’s so call Energy Education? Energy ---- 能源 Education ---- 教育 Energy Education ---- 能源教育.
資料結構(計財系).
C++ 程式語言. 2 C++ 程式語言 – 大綱 1. 指標 2. 結構與類別 3. 標準函式庫 (STL)
Other Thread Synchronization Functions 井民全製作. Introduction.
How to Improve Your English. Language learning is a process ( 過程 ). It is not learned instantly.
機 器 車 介 紹 & 實做. 使用軟體 arduino 環境安裝 控制台 > 裝置管理員 > 更新驅動程式 C:\arduino windows\arduino \drivers.
Introduction to Programming
Dynamic Memory Allocation
C Programming Lecture-8 Pointers and Memory Management
Presentation transcript:

指標 Pointers

int a = 5; int * ptr; // pointer to int ptr = &a; // 取a位址 // int *ptr = &a; *ptr = 10; // 設定指向位址的值 printf(“a = %d\n”, a); // a = 10

int a = 5; int * ptr = &a; *ptr = 10; ptr 位址 1236 1240 1244 1248 1252 1256 值 ?? 1304 a 位址 1296 1300 1304 1308 1312 1316 值 ?? 10 5

小心 int* a, b; // X: b is int!! int *a, *b; // O

小心 Segmentation fault int * ptr; … *ptr = 10; ptr 位址 1236 1240 1244 1248 1252 1256 值 ?? ??

好習慣 int *ptr = NULL; … if(ptr==NULL){ /* error */ } else *ptr = 10;

指標&陣列 char s[16]; char *ptr = s; // 相當於ptr = &s[0]; strcpy(s, “OAO”); printf(“%s\n”, ptr); // OAO putchar(ptr[1]); // A

動態記憶體配置 C style: malloc(), free() int *ptr = malloc(100*sizeof(int)); for(int i=0; i<100; i++) ptr[i] = i; free(ptr); C++ style: new[], delete[] int *ptr = new int[100]; for(int i=0; i<100; i++) ptr[i] = i; delete [] ptr;

小心 int arr[100]; memset(arr, 0, sizeof(arr)); // sizeof(arr) == sizeof(int[100]) // (400 bytes) int *ptr = new int[100]; memset(ptr, 0, sizeof(ptr)); // sizeof(ptr) == sizeof(int*) // (4 bytes)

struct struct XD { int a, b; }; XD xd; xd.a = 2; XD *ptr = &xd; ptr->b = 3; // or (*ptr).b

你可以… void my_strcpy(char *dst, char *src) { for(; *src!=‘\0’; dst++, src++) *dst = *src; } char s1[16], s2[16]; scanf(“%s”, s2); my_strcpy(s1, s2); // my_strcpy(&s1[0], &s2[0])

pointer to pointer int **pp, *p, a; p = &a; pp = &p;

array of pointers int *pa[20], n; pa[2] = &n;

pointer to array int (*pa)[20], arr[20]; pa = &arr;

你可以… int *mat[20], n; scanf(“%d”, &n); for(int i=0; i<20; i++) mat[i] = new int[n]; mat[3][n-2] = 8; delete [] mat[i];

你可以… int **mat, n, m; scanf(“%d%d”, &n, &m); mat = new int*[n]; for(int i=0; i<n; i++) mat[i] = new int[m]; mat[n-2][m-3] = 100; delete [] mat[i]; delete [] mat;

你不可以… void proc(int **mat){ mat[2][3] = 5; } int main() { … proc(mat); // error } gcc: cannot convert ‘int(*)[20]’ to ‘int**’

你可以… void proc(int (*mat)[20]); void proc(int mat[20][20]); ***不建議***

結語 善用指標,可以讓程式更簡潔易懂、更好維護 亂用指標 → 輕鬆RE