- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计-8指针资料
指针和字符数组 字符串的引用方式 字符串是存放在字符数组中的。引用一个字符串,可以用以下两种方法。 用字符数组存放一个字符串,可以通过数组名和格式声明“%s”输出该字符串,也可以通过数组名和下标引用字符串中一个字符。 用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。 指向字符元素的字符指针 指针和字符数组 字符指针作函数参数 如果想把一个字符串从一个函数“传递”到另一个函数,可以用地址传递的办法,即用字符数组名作参数,也可以用字符指针变量作参数。 在被调用的函数中可以改变字符串的内容 在主调函数中可以引用改变后的字符串。 示例:用函数调用实现字符串的复制 解题思路:定义一个函数copy_string来实现字符串复制的功能,在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针变量。分别编程,以供分析比较。 指针和字符数组 (1) 用字符数组名作为函数参数 #include stdio.h int main() {void copy_string(char from[],char to[]); char a[]=I am a teacher.; char b[]=you are a student.; printf(“a=%s\nb=%s\n,a,b); printf(copy string a to string b:\n); copy_string(a,b); printf(“a=%s\nb=%s\n,a,b); return 0; } void copy_string(char from[], char to[]) { int i=0; while(from[i]!=\0) { to[i]=from[i]; i++; } to[i]=\0; } 指针和字符数组 (2)用字符型指针变量作实参 copy_string不变,在main函数中定义字符指针变量from和to,分别指向两个字符数组a,b。,仅需要修改主函数代码 #include stdio.h int main() {void copy_string(char from[], char to[]); char a[]=“I am a teacher.”; char b[]=“you are a student.”; char *from=a,*to=b; printf(“a=%s\nb=%s\n,a,b); printf(\ncopy string a to string b:\n); copy_string(from,to); printf(“a=%s\nb=%s\n,a,b); return 0; } 指针和字符数组 (3)用字符指针变量作形参和实参 #include stdio.h int main() {void copy_string(char *from, char *to); char *a=“I am a teacher.”; char b[]=“You are a student.”; char *p=b; printf(“a=%s\nb=%s\n”,a,b); printf(\ncopy string a to string b:\n); copy_string(a,p); printf(“a=%s\nb=%s\n”,a,b); return 0; } void copy_string(char *from, char *to) { for( ;*from!=\0; from++,to++) { *to=*from; } *to=\0; } 函数体有多种简化写法,请见主教材 动态内存分配 一个指针变量到底占几个字节 预备知识: sizeof(数据类型/变量名); 功能:返回值就是该变量或数据类型所占字节数。 思考 假设p指向char类型变量(1个字节) 假设q指向int类型变量(1个字节) 假设r指向double类型变量(1个字节) ?p q r本身所占的字节是否一样 结论 一个指针变量无论其指向变量占几个字节,其本身所占大小都是4字节。 动态内存分配 传统数组的缺点 数组长度必须事先指定,而且只能是常整数,不能是变量 int a[5]; //必须事先指定,而且只能是常整数 传统形式定义的数组,该数组的内存程序员无法手动释放 数组一旦定义,系统为数组分配的内存空间就会一直存在,除非数组所在的函数运行终止。 数组的长度一旦定义,数组长度就不能再更改。 数组的长度不能
文档评论(0)