一、学习内容总结
通过指针的部分学习,我知道了指针的作用是用来存放地址的。指针无论定义的是哪种数据类型占用的内存空间都是8字节,和数组对比我觉得,数组字符串里的字符是可以修改的,而指针定义字符串里的内容不能修改。知道 * 和 & 是互逆的两个运算符;swap的作用是交换两个变量的值,在指针中定义一个数组,代表的是数组的第一个元素地址,数组名代表数组的首地址。在指针加减中,当指针变量指向数组中的某一个地址时,指针变量加1后指向数组的下一个元素,指针变量减1时指向数组的前一个元素。
二、在课堂或课后编程学习遇到的问题及解决过程
·问题一
在课下练习中,没有特别注意,例如:chars1[10]="1234567"; char*p; strcpy(p,s1); printf("%s",p); 在编译时没有错误,但是在运行时不对。因为使用了指针 p,但是在之前却没有对p赋值,所以不能将 s1 内容复制到 *p 中。
解决方案:因为使用了指针 p,但是在之前却没有对 p 赋值,所以不能将s1内容复制到 *p 中。
·问题二
指针中*和&符号意义还没有完全记清楚。
解决方案:例如:在int * p=&a中*为了说明p是一个指向整形数据的变量,而在 *p=5 中 * 表示取p所指向内存的数据,所以 *p=a。
·问题三
在交换函数时定义时出现错误。
解决方案:在编程中int * temp表示声明了一个指针变量,*a表示取 a 所指单元的数据,是一个int型变量,所以两者的数据类型不匹配导致出错。
三、作业
- 输出截图:
#include<stdio.h> #include<string.h> void main() { char c,s[80]; int i,k=0; gets(s); c=getchar(); for(i=0;s[i]!=‘\0‘;i++) { if(s[i]==c) k++; } printf("%d",k); }
- 输出截图:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int n=5,i,j; char **str; char s[100]; str=(char**)malloc(sizeof(char*)*n); for(i=0;i<n;i++) { str[i]=(char*)malloc(sizeof(char)*100); printf("请输入第%d个字符串\n",i+1); gets(str[i]); } puts("排序后的字符串为:"); for(i=0;i<n;i++) { for(j=i;j<n-1;j++) { if(strcmp(str[j+1],str[j])<0) { strcpy(s,str[j+1]); strcpy(str[j+1],str[j]); strcpy(str[j],s); } } } for(i=0;i<n;i++) { puts(str[i]); } for(i=0;i<n;i++) { free(str[i]); str[i]=NULL; } free(str); str=NULL; return 0; }
四、附加内容