第八章指针81指针的基本概念811指针的主要用途及特点内容摘要:

i]步进值为 8(VC:16), a[i]和 amp。 a[i][j]步进值为 2(VC:4)。 假设以上数组 a的地址为 2020,在 turbo C环境、有关程序对象的表示形式、含义及地址之间的关系如下表所示: 在三维数组中、数据定位采用 页指针、行指针、列指针 等。 三维数组名为页指针、数组名带一个下标为行指针、带两个下标为列指针。 将多维数组看成一维数组、如果其元素又进一步看成一维数组直至 定义的数组数据类型 元素, amp。 运算提高指针级别直至多维数组名级别; *运算降低指针级别直至 定义的数组数据类型元素。 多维数组名及其分段数组名是指针常量,在程序运行过程中是不能修改的;可采用如下方式定义 指向数组的指针变量。 如: int (*p)[4]。 定义了一个指向 包含有 4个整形元素的数组 的指针变量 p。 这个表达式也要按照 ()[]*三个运算符的优先级别与结合性去理解, p与 int a[3][4]定义的数组名 a具有相同的属性。 按此思路、不难写出定义 具备指定步进值的指向指定数据类型的 指针变量语句。 分析如下程序在 VC环境的执行结果: 例 8_4_2 include void main() {int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}。 int (*p)[4]=a。 int i,j。 printf(please input i and j\n)。 scanf(%d%d,amp。 i,amp。 j)。 printf(a[i][j]=%d\n,*(*(a+i)+j))。 printf(p=%u,*p=%u,**p=%d\n,p,*p,**p)。 printf((*p+1)=%u,*(*p+1)=%d\n,*p+1,*(*p+1))。 p++。 printf(p=%u,*p=%u,**p=%d\n,p,*p,**p)。 printf((*p+1)=%u,*(*p+1)=%d\n,*p+1,*(*p+1))。 } 字符串的指针 字符串的表示形式 ①用字符数组实现 static char str[ ]=I love China !。 str[i]表示字符数组中的第 i+1个字符。 如 : str[8]为字符‘ h’ ② 用字符指针实现 char *a=I love China!。 VC编译器在 内存常量区 建立了一个字符数组用来存放字符串常量,然后将字符数组地址保存于 a。 同样, a[8]为字符‘ h’。 例 8_4_3a 顺读和倒读都一样的字符串称为 “回文 ”,如:LEVEL。 试编写一个判断输入的字符串是否为回文的程序。 include include void main( ) { char s[81],*pi,*pj。 int i,j,n。 gets(s)。 n=strlen(s)。 pi=s。 pj=s+n1。 while(*pi==39。 39。 ) pi++。 //跳过输入时的前导空格 while(*pj==39。 39。 ) pj。 //跳过输入时的尾随空格 while((pipj)amp。 amp。 (*pi==*pj)) {pi++。 pj。 } if(pipj) printf(NO\n)。 else printf(YES\n)。 } 例 8_4_3b 输入一行字符,统计其中有多少个单词。 include void main( ) {char c, string[81]。 int i, num=0, word=0。 gets(string)。 for ( i=0。 (c=string[i])!=39。 \039。 i++) if (c==39。 39。 )word=0。 else if(word==0) {word=1。 num++。 } printf(There are %d words in the line\n,num)。 } 指向指针的指针与指针数组 ①指向指针的指针 定义形式: 类型标识符 **标识符 如: int **pp。 可说成: pp是指针指向另一指向整形数的指针。 ②指针数组定义形式: 类型标识符 *数组名 [数组长度 ] 注意与指向数组的指针区别 如: int *p[4]。 可说成: p是数组,每个数组元素是指针、数组有 4个元素、每个元素指向整型数据。 不难看出、 p是指向指针的指针常量。 例 (一 ) include void main() {static int a[5]={1, 3, 5, 7, 9}。 static int *num[5]={amp。 a[0],amp。 a[1],amp。 a[2],amp。 a[3],amp。 a[4]}。 int **p=num,i。 for (i=0。 i5。 i++) {printf(%3d,**p)。 p++。 } //此处 **p改为 *p行吗 ? printf(“\n”)。 } 例 指向指针的指针与指针数组配合应用 (二 )。 include void main() {static char *name[ ]={Follow me,BASIC,\ Great Wall,FORTRAN,Computer design}。 int i。 char **p。 //p可修改。 name不能改。 for(i=0。 i5。 i++) {p=name+i。 printf(%s\n,*p)。 } } 指针作为函数参数 指针作为函数参数的作用是将一个程序实体的地址传送至另一个函数中、从而实现所。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。