Introduction to the C Programming Language

Slides:



Advertisements
Similar presentations
C语言程序设计教程 单位:德州学院计算机系.
Advertisements

第8章 指针 ● 8.1 指针简介 ● 8.2 指针变量的操作 ● 8.3 数组与指针 ● 8.4 二维数组与指针 ●本章小结 ●本章练习.
计算机硕士专业基础—C语言 赵海英
C语言基础——指针的高级应用 Week 05.
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
数据结构与算法 数据结构与算法实验
文化生活第三单元 中华文化和民族精神.
第九章 指针 目录 指针与指针变量的概念 变量的指针和指向变量的指针变量 数组的指针和指向数组的指针变量
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
C语言程序设计 第十二章 位运算.
Introduction to the C Programming Language
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
程序设计基础.
第六章 数 组 主讲教师 贾月乐 联系电话:
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
第5章 函数与预处理 《 C语言程序设计》 (Visual C++ 6.0环境) 本章导读
第一章 C语言概述.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
選擇排序法 通訊一甲 B 楊穎穆.
資料大樓 --談指標與陣列 綠園.
Introduction to the C Programming Language
C 程式設計— 指標.
目录 10.1 指针的基本概念 10.2 指向变量的指针变量 10.3 指向数组的指针变量 10.4 指向函数的指针变量和指针型函数
第四章 函数和递归.
项目六 用指针优化学生成绩排名 项目要求 项目分析
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
Introduction to the C Programming Language
Introduction to the C Programming Language
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
Introduction to the C Programming Language
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
Introduction to the C Programming Language
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
第八章 使用指针.
Introduction to the C Programming Language
第十章 指针.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
语义分析概述 符号表 第六章 语义分析.
第7章 陣列與指標 7-1 陣列的基礎 7-2 一維陣列的處理 7-3 二維與多維陣列的處理 7-4 陣列的函數參數
《2015考试说明》新增考点:“江苏省地级市名称”简析
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
C++语言程序设计 第六章 数组 指针与字符串.
C语言复习3----指针.
C语言程序设计.
Introduction to the C Programming Language
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
C语言程序设计 教案 崔武子制作
第八章 指標 (Pointer).
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
指標
第六章 指针 C++程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
第十章 指针 指针是C语言的重要概念,是C语言的特色,是C语言的精华。 10.1 地址和指针的概念 内存中的每一个字节都有一个地址。
第九章 指针.
静定结构位移计算 ——互等定理 主讲教师:戴萍.
THE C PROGRAMMING LANGUAGE
习 题 课(作业).
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
本节内容 算术运算符 视频提供:昆山爱达人信息技术有限公司.
第七章  数 组.
第三章 高级函数特性.
Introduction to the C Programming Language
Introduction to the C Programming Language
資料!你家住哪裏? --談指標 綠園.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C语言基础学习 从外行到入门.
Presentation transcript:

Introduction to the C Programming Language 指標 (Pointer)

指 標 (Pointer) 指標變數所存放的內容為記憶體位置,而指標變數在記憶體中佔幾個記憶體位元組,則視所使用的語言系統而定,以Turbo C而言是2個位元組. 宣告指標變數時,需在變數名稱前加個 * 號以玆識別. * 號除了在指標變數宣告時使用外,最主要是用來存取pointer所指到的變數值. 例: *pa=0; [ 將0存入pa所指的變數內 ] y=*pa; [ 取pa所指的變數值(0),再設給y ] pa=&x; [ 以&符號取得x的位址,存入pa(把pa指向x) ] y=*pa; [ 把pa所指的變數存入y ] 若指標沒指到任何一個位置,其初值要設為NULL,NULL在stdlib.h,stdio.h,stddef.h,mem.h,alloc.h的標頭檔皆有定義.

指 標 (Pointer) 範例一: 指標的運算 #include<stdio.h> void main() { int *ptr,i,val; i=20; ptr=&i; val=*ptr; printf("val=%d\n",val); }  ptr 所指的位址等於 i 的位址

指 標 (Pointer) 範例二: 指標的應用 #include<stdio.h> main() { int a=3,b=4; int *fp; printf("The original values are: a=%d , b=%d \n" , a , b ); printf("The Address are : &a=0x%p , &b=0x%p \n", &a , &b ); fp=&a; *fp=100; printf( "passing *fp=100 , a value change=%d \n" , a ); fp=&b; printf("passing fp=&b , fp value change=%d\n", *fp ); } 宣告 : fp 是指向整數變數的pointer 以 & 取得 a 變數的位址, 將位址設給 fp ( fp 指向a) 把100存入 fp 所指的變數內 以 & 取得 b 變數的位址, 將位址設給 fp ( fp 轉指向b) 利用 * 號 間接取值

傳入pointer值(變數位址即為pointer的值) 以指標來傳引數 範例三:設計一個傳值函式noswap(),及一個傳址函式swap(), 將從主程式傳來的兩個正數引數值互相對調 #include<stdio.h> main() { int x=2,y=3; void noswap(int a , int b ); void swap( int *a , int *b ); printf("The original values are: x=%d , y=%d \n" , x , y ); noswap(x,y); printf("The x y are changed : x=%d , y=%d \n", x , y ); swap(&x,&y); } 傳入pointer值(變數位址即為pointer的值)

以指標來傳引數 接上頁(範例三) void noswap ( int a , int b ) { int t; t=a; a=b; b=t; } void swap ( int *a , int *b) t=*a; *a=*b; *b=t;

指位器的指位器 指標(pointer)也可以指向指標,可稱為“指位器的指位器“ 指位器的指位器的宣告方式: int **pa; 亦可寫成 int*(*pa) [ pa是一個pointer,它指向一個整數的pointer ]

以指標來傳引數 範例四: 指標以位址傳遞(call by address) #include<stdio.h> main() { int a=1,b=2,*p,*q; void sub( int ** , int ** ); p=&a; q=&b; sub(&p,&q); printf("a=%d b=%d \n" , *p , *q ); } void sub ( int **x , int **y ) *x=*y; }

指標與陣列的關係 在C語言裡,指標與陣列的關係密不可分,兩者的差別是:陣列是固定長度的連續實體,而指標則是用來記錄位址的單一變數. 建立指標與陣列的關係 char a[10]; /*宣告陣列*/ pa=&a[0]; /*第一個指標指向陣列的開頭(第0個元素)*/ 以此為基點用索引的方式來取得陣列的每個元素 *(pa) 取到的是陣列的第0個元素 a[0] *(pa+1) 取到的是陣列的第1個元素 a[1] *(pa+i)取到的是陣列的第i個元素 a[i]

指標與陣列的關係 範例五: 用指標取出陣列元素的位址 #include<stdio.h> main() { int i; char *pa; char a[4]={'A','B','C','D'}; pa=a; for(i=0;i<4;i++) printf("a[%d] value:%c ; *(pa+%d) value:%c\n",i,a[i],i,*(pa+i)); printf("&[%d] address:%x ; *(pa+%d) address:%x\n",i,&a[i],i,pa+i); } Pointer指向陣列的開頭

指標與陣列的關係 範例六: 利用指標將陣列元素相加 #include<stdio.h> void main() { int array[5]; int *ptr,i,sum; printf("Please enter 5 integer:\n"); for(i=0;i<5;i++) scanf("%d",&array[i]); sum=0; for(ptr=array;ptr<&array[5];ptr++) sum+=*ptr; printf("The sum of this array is %d\n",sum); }

指標與陣列的關係 範例七: 將數字由小到大排序(選擇排序法). #include<stdio.h> main() { void swap(int *a,int *b); void printArray(int n,int a[]); int a[] = {32,43,12,7,52,95,66,28}; int i,j,min,t; printf("The original Array:"); printArray(8,a); for(i=0;i<8;i++) for(j=min=i;j<8;j++) if(a[j]<a[min]) min=j; swap(&a[min],&a[i]); } printf("The sorted Array:");

指標與陣列的關係 接上頁(範例七) void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } void printArray(int n,int b[]) int i; for(i=0;i<n;i++) printf("%5d",b[i]); printf("\n");

指位器陣列 陣列的元素也可以是pointer,這種陣列叫做“指位器陣列” 指位器陣列對於不定長度的資料處理非常有用,因陣列是固 定的存放空間,資料搬動很不方便,可採指位器陣列來解決 問題 指位器陣列的宣告方式: char *p[m]; [ p是一個陣列,其元素是字元的pointer ]

指位器陣列 範例八: 指位器陣列的使用--字串排序 #include<stdio.h> #include<string.h> #define SIZE 100 void main() { char s[SIZE][SIZE]; char *line[SIZE]; char *p; int i,j,k; for (i=0;i<SIZE;i++) printf("%d:",i++) get(s[i]); if(strcmp(s[i],"q")==0) break; line[i]=s[i]; }

指位器陣列 接上頁(範例八) for (j=0;j<i-1;j++) for (k=j+1;k<i;k++) if (strcmp(line[j],line[k] )>0) { p=line[k]; line[k]=line[j]; line[j]=p; } printf("\nSorting...\n"); for(j=0;j<i;j++) printf("%d:%s\n",j+1,lint[j]);