




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
指標(Pointer)C
Language1CSIM,
PUIntroduction
to
the
C
ProgrammingLanguage指標
(Pointer)C
Language2CSIM,
PU❏指標變數所存放的內容為記憶體位置,而指標變數在記憶體中佔幾個記憶體位元組,則視所使用的語言系統而定,以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=%dn",val);❏
}❏
1A;ptr所指的位址等於
i的位址C
Language3CSIM,
PU指標
(Pointer)❏範例二:指標的應用#include<stdio.h>main(){int
a=3,b=4;int
*fp;*fp=100;printf(
"passing
*fp=100
,
a
value
change=%d
\n"
,
a
);fp=&b;printf("passing
fp=&b
,
fp
value
change=%d\n",
*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;以&
取得
a
變數的位址,將位址設給
fp
(fp指向a)把100存入
fp
所指的變數內以&
取得
b
變數的位址,將位址設給
fp
(fp轉指向b)宣告:fp
是指向整數變數的pointer利用
*號間接取值C
Language4CSIM,
PU以指標來傳引數❏範例三:設計一個傳值函式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);printf("The
x
y
are
changed
:
x=%d
,
y=%d
\n",
x
,
y
);}傳入pointer值(變數位址即為pointer的值)C
Language5CSIM,
PU以指標來傳引數C
Language6CSIM,
PU❏接上頁(範例三)void
noswap
(
int
a
,
int
b
){int
t;t=a;a=b;b=t;}void
swap
(
int
*a
,
int
*b){int
t;t=*a;*a=*b;*b=t;}指位器的指位器C
Language7CSIM,
PU❏指標(pointer)也可以指向指標,可稱為“指位器的指位器“❏指位器的指位器的宣告方式:❏
int
**pa;❏
亦可寫成int*(*pa)[pa是一個pointer,它指向一個整數的pointer]以指標來傳引數C
Language8CSIM,
PU❏範例四:指標以位址傳遞(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;}1A;C
LanguageCSIM❏,
PU指標與陣列的關係❏在C語言裡,指標與陣列的關係密不可分,兩者的差別是:陣列是固定長度的連續實體,而指標則是用來記錄位址的單一變數.❏建立指標與陣列的關係❏char
a[10];/*宣告陣列*/❏❏pa=&a[0];/*第一個指標指向陣列的開頭(第0個元素)*/❏
以此為基點用索引的方式來取得陣列的每個元素❏
*(pa)取到的是陣列的第0個元素a[0]❏
*(pa+1)取到的是陣列的第1個元素a[1]❏
*(pa+i)取到的是陣列的第i個元素a[i]9指標與陣列的關係❏範例五:用指標取出陣列元素的位址#include<stdio.h>main(){int
i;char
*pa;char
a[4]={"A","B","C","D"};pa=a;Pointer指向陣列的開頭for(i=0;i<4;i++)printf("a[%d]
value:%c
;
*(pa+%d)
value:%c\n",i,a[i],i,*(pa+i));for(i=0;i<4;i++)printf("&[%d]
address:%x
;
*(pa+%d)
address:%x\n",i,&a[i],i,pa+i);}C
Language10CSIM,
PU指標與陣列的關係C
Language11CSIM,
PU❏範例六:利用指標將陣列元素相加❏#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);❏}指標與陣列的關係C
Language12CSIM,
PU❏範例七:將數字由小到大排序(選擇排序法).#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:");printArray(8,a);}指標與陣列的關係C
Language13CSIM,
PU❏接上頁(範例七)❏
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");❏
}指位器陣列C
Language14CSIM,
PU❏陣列的元素也可以是pointer,這種陣列叫做“指位器陣列”❏指位器陣列對於不定長度的資料處理非常有用,因陣列是固定的存放空間,資料搬動很不方便,可採指位器陣列來解決
問題❏指位器陣列的宣告方式:char
*p[m];
[p是一個陣列,其元素是字元的pointer]❏範例八:指位器陣列的使用--字串排序#include<stdio.h>#include<string.h>#define
SIZE
100void
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];}C
Language15CSIM,
PU指位器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度月子中心产后恢复中心合作框架协议
- 中国广电手机产品白皮书2025年版
- 2025年度储能设备箱涵项目施工临时照明劳务分包合同
- 2025年发酵类制品项目建议书
- 2025年钻采装备项目发展计划
- 2025年青霉素类抗菌药物合作协议书
- 如何将个人成长纳入月度工作计划
- 学生发展报告与个案分析计划
- 如何开展班级传统文化教育计划
- 幼儿阅读推广计划
- 住院精神疾病患者自杀风险护理
- 供应室课件大全
- 浙江省大学生职业生涯规划大赛赛前辅导课件
- 部编四下语文《口语交际:转述》公开课教案教学设计【一等奖】
- 仓库每日巡查制度
- 学校教育数字化工作先进个人事迹材料
- 动物防疫服务投标方案(技术方案)
- 2024年新课标全国Ⅰ卷语文高考真题试卷(含答案)
- 2024中国AI应用开发者生态调研报告-易观分析
- -中国传统节日之春节习俗介绍主题班会14
- 2024鲁教版七年级下册数学第七章综合检测试卷及答案
评论
0/150
提交评论