- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章_指针_2
C语言程序设计教程 第6章:指针 主要内容 指针访问多维数组的三种方式 简单指针、行指针、指针数组的定义和使用 三种方式分别应用于什么样的场合 指针与字符串 字符串数组 指针和多维数组 假如有4×3二维整型数组a[4][3]: 数组在内存中按行顺序存储, 定义并初始化二维数组a: int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; 或者: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; 这两种方法并没有实质的差别。但是从形式上看,前一种方式更符合多维数组的概念抽象:把二维数组理解为“数组的数组”,即数组a是由4个一维数组所组成的,每个一维数组由3个整数组成。后一种方式,则更多的反映了多维数组在计算机内的物理存储结构:按行顺序存储。 用指针访问二维数组有三种形式 第一种形式是定义简单指针,不妨称之为按二维数组存储结构定义的指针,它指向二维数组的一个元素。 第二种形式是定义行指针(也称数组指针),它指向二维数组的一行。 第三种形式是定义指针数组,它的每一个元素指向二维数组的一行。 下面分别通过实例演示 简单指针访问 行指针访问 定义指针数组 int * p[4]; 运算符[ ]的优先级高于*, p是有4个元素的数组,每个元素为一指向整数的指针。 注意同行指针定义相区别。 指针与字符串 字符指针和字符串 定义如下字符型指针: char *p; 则指针变量p就可以指向单个字符型数据。 char c = H; char *p = c; //定义并初始化字符指针 *p = h; //访问并修改字符数据 也可以是一个字符串常数,如: char *p = this is a test string!; //p指向字符串 printf(%s, p); //输出p所指串的内容 还可以是一个字符型数组,如: char str[]=”I am a student”; //str是字符型数组 char *p=str; //p指向str首字符 puts(p); //输出str中的字符串 有名字符串和无名字符串 char str[] = hello; //用字符型数组存放字符串 char *string = “hello”; //用字符型指针指向字符串 区别: 注意: 当使用字符数组定义字符串时,将语句: char str[ ] = hello; 分开写成: char str[6]; str = hello; 是错误的 而语句: char *string; string = hello; 是正确的 用指针处理有名字符串和无名字符串的区别。 指针数组和字符串 指针可用来处理字符串表。假设有如下字符串数组 char anames[4][18] = { Paul J. Deitel, Martin Kalin, Erics S. Roberts, Dennis M. Ritchie }; 在内存中的存储 字符串指针数组 char *names[4] = { Paul J. Deitel, Martin Kalin, Erics S. Roberts, Dennis M. Ritchie }; 在内存中的存储 看一看:两种方式各需要多少字节的空间? 练习: 1.下面的程序通过指针变量改变所指变量的值。 main() { int a,b,*pa,*pb,*p; /*pa指向a*/ /*pb指向b*/ scanf(%d,%d,pa,pb); if(*pa*pb) { }/*pa和pb交换指向*/ printf(%d=%d\n,*pa,*pb); } (1)该程序的主要功能是什么? (2)分析并把程序补充完整。 (3)写出程序的运行结果。 (4)如果不改变指针指向,如何交换a、b的值,请写出程序的代码。 2.有程序如下: #include stdio.
文档评论(0)