1.一开始还迷惑我们,假装很简单的样子。。。
#include<stdio.h> void sum(int *p) { int i,sum=0; for(i=0;i<5;i++) sum=sum+*p++; printf("%d",sum); } int main() { int a[5]={1,9,2,8,10}; int *p=a; sum(p); return 0; }
2.一开始不知道改了题目还做了一下字符串的那个,好麻烦啊,比较字符串大小如果是一个个比的话就是二维数组还要对应着比,字符串之间要怎么比较的确是要考虑好多东西,还有字符串要互换位置也是又要想半天,后来看见换成字符了,但还是被空格和回车坑了,各种错误,各种想,各种改。。。相比上题难度翻了好几倍啊!
#include<stdio.h> int main() { char a[5],temp; char *p=a; int i,j; for(i=0;i<5;i++) scanf("%c",&a[i]); for(j=0;j<5;j++) { for(i=4;i>0;i--) { if(a[i]<a[i-1]) { temp=p[i]; p[i]=p[i-1]; p[i-1]=temp; } } } for(i=0;i<5;i++) printf("%c ",*p++); return 0; }
再上一个输入字符串排序版本的
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char *p[5]; char str[100],*temp; int i,j; for(i=0;i<5;i++) { scanf("%s",str); p[i]=(char *)malloc(sizeof(char)*strlen(str)); strcpy(p[i],str); } for(j=0;j<5;j++) { for(i=1;i<5;i++) { if(strcmp(p[i],p[i-1])<0) { temp=p[i]; p[i]=p[i-1]; p[i-1]=temp; } } } for(j=0;j<5;j++) printf("%s ",p[j]); return 0; }
3.老师上课讲过的特别相似的,倒也还好。。。。
#include<stdio.h> #include<stdlib.h> int main() { int *p=new int[10]; int i; for(i=0;i<10;i++) scanf("%d",&p[i]); for(i=0;i<10;i++) printf("%d ",p[i]); free(p); return 0; }
4.又是这种古怪的题,一开始再次不能理解题目,没弄清初始化是个什么东西啊,然后指针还没有完全清楚,就一直试着编,瞎搞一通后脑袋里成功全是浆糊,还得继续试,慢慢也更熟悉了一些,就是有几个关键的地方老错,怎么换都不对,就卡在那里了,后来通过请教助教,查询,问人,最后又听了课之后,应该算是用指针初始化并打印出来二维数组了,,,难度max啊!
也是附上两个版本,一个是自定的初始化,一个是用户输入的初始化
#include<stdio.h> int main() { int a[10][10],i,j,n=0; int *p[10]; for(i=0;i<10;i++) p[i]=a[i]; for(i=0;i<10;i++) { for(j=0;j<10;j++) { p[i][j]=n++; printf("%d ",p[i][j]); } printf(" "); } return 0; }
#include<stdio.h> int main() { int a[3][3],i,j,n=0; int *p[3]; for(i=0;i<3;i++) p[i]=a[i]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&p[i][j]); } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%d ",p[i][j]); } printf(" "); } return 0; }
本来我是感觉用户自己输入的会更难一些,因为我感觉我自己在尝试scanf时用指针遇到了更多的疑惑和问题,结果最后做下来的结果却是很相似的。。。就只是用了p[i][j],因为指针有这里有一些相似的代码是等价的,而有一些却不相同,这个我觉得大家都还不是特别的清楚,希望能看到更多版本,也希望助教后面可以给我们展示不同的版本。最后,我还有一个问题,我的第一个for循环里面是p[i]=a[i],它与p[i]=a[i][0]有什么区别,不应该都是指向数组首地址吗,为什么我用后者就会报错啊。
感想:指针感觉一下子就听不懂了,格式还是知道的太少了,不知道应该怎么用,听下来还好,但一做,就有很多小细节容易犯错,如果错的太多容易改了一处还错,就又把改了的给改回错的了,我们知道的还有些片面,感觉差别就在之前是没看到错误然后一直在找,现在是都不知道哪里错了,怎么改才是对的,看到错误都不知道是错的,这就难过了。希望之后多做能够让思路越来越清晰吧。