第2次作业
一、学习内容总结
通过指针的学习,我懂得了指针是C语言的核心,和我们以前学习的内容都能联系起来,不容易理解,指针特别抽象,下面是我对开学一个月来指针学习的总结:
1.指针与地址
①在计算机中,内存是以字节为单位的连续存储空间,每一个字节都有一个编号,这个编号称为地址。
②系统为变量分配内存单元地址,地址是一个无符号的整型数。
③对变量值的存取操作都是通过地址进行的,直接按变量的地址存取变量值的方式称为直接存储方式。通过变量a得到变量b的地址,然后再存取变量b的值的方式称为
间接存取方式。
④一个变量所占字节中的第一个字节的地址,称为这个变量的地址。
2.指针和指针变量
实例1.指针变量定义与赋值
在本程序中定义了指针变量,并为指针变量赋值。*p表示取指针变量p所指向的内容。
另外在此程序中,一定要有 “p=&i,q=&j”否则,指针变量在为存储确定地址时,值是不确定的不能使用,会造成系统崩溃。
实例二.指针变量的应用,输入两个数并交换它们的值。
通过这个实例我了解到,之前学的问题还可以用指针解决。
3.指针的运算
指针变量和普通的变量一样可以进行多种运算,对指针变量可以进行赋值运算、取地址运算、取内容运算、加减算术运算、关系运算。
①&和*运算
二、在课堂或编程学习遇到的问题及解决办法
问题一:不懂得指针的算术运算问题(不知道*x+2怎么运算)?
解决方法:在上课的过程中及时问郭志康同学,他告诉我,*x是指向x地址中的值,而*x+2则是他后面数两位地址中的值。
问题二:不明白p=&a[];是什么鬼?
解决方法:通过查阅参考书知道,数组名代表数组的首地址,也就是第一个元素a[0]的地址,更直白的说现在就是把a[0]的值赋给了p;
问题三:在学习指向字符串的指针的时候,不明白for(";*p!='\0';i++)是什么意思?
解决办法:请教我们班C语言大神曹琪,在内存中,字符串的最后被自动加入了一个'\0',用来标识字符串的结束。
三、作业
1.PTA作业
1 #include<stdio.h> 2 int main() 3 { 4 char str[80],a; 5 int k=0,i,count=0; 6 while((str[k]=getchar())!='\n') 7 k++; 8 scanf("%c",&a); 9 for(i=0;i<=k;i++) 10 { 11 if(str[i]==a) 12 count++; 13 } 14 printf("%d",count); 15 return 0; 16 }
2.以二维数组形式对5个字符串进行排序
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 int n,i,j; 7 char **str; 8 char s[100]; 9 printf("请输入n:"); 10 scanf("%d",&n); 11 getchar(); 12 str=(char**)malloc(sizeof(char*)*n); 13 for(i=0;i<n;i++) 14 { 15 str[i]=(char*)malloc(sizeof(char)*100); 16 printf("请输入第%d个字符串\n",i+1); 17 gets(str[i]); 18 } 19 puts("排序后的字符串为:"); 20 for(i=0;i<n;i++) 21 { 22 for(j=i;j<n-1;j++) 23 { 24 if(strcmp(str[j+1],str[j])<0) 25 { 26 strcpy(s,str[j+1]); 27 strcpy(str[j+1],str[j]); 28 strcpy(str[j],s); 29 } 30 } 31 } 32 for(i=0;i<n;i++) 33 { 34 puts(str[i]); 35 } 36 for(i=0;i<n;i++) 37 { 38 free(str[i]); 39 str[i]=NULL; 40 } 41 free(str); 42 str=NULL; 43 return 0; 44 }
四、附加内容
注册中国大学Mooc
观看浙江大学的程序设计入门——C语言