一·学习内容总结
1.数组名是数组所存储空间的首地址
2.在函数的参数中使用数组名与使用指向数组第一个元素的指针是同一个效果,等价,在函数的参数中使用数组名会方便理解某参数是指向某个元素起始地址的指针
3对于数组int a[10];a表示数组第一个元素的地址即&a[0];如果使指针p指向数组的首元素可以进行操作;intp=a;或者intp=&a[0];那么p++,是指向数组的先一个元素,即a[1];此时,a[i]=p[i]=(a+i)=(p+i)
(1)p++;(或P+=1) 指向下一个元素。
(2)p++;等价于(p++);先得到p指向的变量的值,p再加1。
(3) (p++);与(++p);作用不同,前者先取p,后使p加1;后者相反。
(4) (p)++表示p所指向的元素值加1
(5) 若p当前指向a数组第i个元素,则: (p--)相当于a[i--],先取p值作""运算,再使p自减; (++p)相当于a[++i],先使p自加,再作""运算; (--p)相当于a[--i],先使p自减,再作""运算。
二·在课堂或课后编程学习遇到的问题及解决过程
问题1 :在课后作业“二维数组冒泡排序”的编程中,运用一维数组冒泡排序的思路,忽视二维数组多出来的一层边界的越界问题出现答案错误
问题1的解决方案:重新考虑第二层边界的越界问题,提供查找书籍学习并修改了for循环的条件。
问题2:指针的地址赋值错误
问题2的解决方案:在指针赋值时,单个地址时,需要“&”符号;赋值整个数组时,不用“&”符号。
问题3:指针中和&符号意义没有完全整清楚
问题3的解决方案:在int * p=&a中说明p是一个指向整形数据的变量,在 *p=5 中 * 表示取p所指向内存的数据,所以 *p=a。
三·作业
1.
题目.统计字符出现次数
-
实验代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[100];
int i;
int s=0;
char ch;
gets(a);
ch=getchar();
for(i=0;a[i]!=' ';i++)
{
if(a[i]==ch)
s++;
}
printf("%d",s);
}
输出截图:
2.
实验代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void selectsort(char a[][20],int n)
{int i,z,j;
char x[20];
for(i=0;i<n;i++)
{
z=i;
for(j=i+1;j<n;j++) if(strcmp(a[j],a[z]) < 0)z=j;
if(z>i)
{
strcpy(x,a[i]);
strcpy(a[i],a[z]);
strcpy(a[z],x);
}
}
}
int main()
{
int i;
char str[5][20]=
{
"persistence",
"supreme",
"me",
"future",
"here"
};
printf("The string array:
");
for(i = 0;i < 5;i++)
printf("%s
",str[i]);
selectsort(str,5);
printf("After sort the string array:
");
for(i = 0;i < 5;i++)
printf("%s
",str[i]);
system("PAUSE");
return 0;
}
四·附加内容