第二次作业
一、学习内容总结
通过指针的部分学习,我知道了指针的作用是用来存放地址的。指针无论定义的是哪种数据类型占用的内存空间都是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型变量,所以两者的数据类型不匹配导致出错。
三、作业
1.
#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);
}
输出截图:
2.
#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;
}
输出截图:
四、附加内容