小白上一节才学习到指针函数,这一节的二级指针还有下面的例子不是很了解,有点懵..
小白上例子,除了书上有两处自带的注释,小白带上自己的理解和注释以及步骤,望老师尽释我心中
疑团,小白不会的会在/* ?*/加个问号,方便老师解答。步骤用/*b1 等于 步骤1 */
#include<stdio.h>
#include<string.h> /* ?这个是做什么的*/
void sort(char *name[],int n) /*b5 接收了name和n,2个行参和实参的类型一样*/
{
char *temp; /*b6 声明一个指针类型temp,我看了下下面这个是用来交换2个数组元素值的*/
int i,k,j; /*b7 声明3个整形变量*/
for(i=0;i<n-1;i++) /*b8 这个for是用来确定第一个,也是较小的那个数组元素 name[i]*/
{
k=i; /*?b9 这个以前有点印象,貌似很多元素比较大小,都会多一个k这样的变量承接上一次的i
但具体是怎么回事还不是很了解,知道的老师告诉下*/
for(j=i+1;j<n;j++) /*b10 由于j=i+1,也就是j永远比i大1,从2层循环来分析,应该是这样比较,
name[i]i为0的时候,和name[j]j就为1了,然后name[0]和name[1~4],然后第二个for满足条件返回第一个for,第一个for的name[i],i就为1了,以此类推。这样理解对吗*/
{ /*strcmp()函数是比较两个字符串的大小*/
if( strcmp(name[k],name[j] )>0 ) /*?b10 判断语句,如果strcmp函数,这样我记得是 函数的调用,但是这个 函数内的(name[k],name[j])>0,这一段不懂。*/
k=j; /*?b11 当上面的例子符合的时候k=j,而刚刚提到的k=i,这2个应该是有关联的*/
if(k!=i) /*b12 如果k不等于i的话,则执行下面*/
{
temp=name[i];name[i]=name[k];name[k]=temp; /*b13 实际上这个就是name[]i和k的互换*/
}
}
}
}
void print(char *name[],int n) /*b15 接受了实参,并且上面的过程中数组元素已经排列好了大小*/
{
int i; /*b16 声明一个i,没什么大意义,就是下面for用到的,也可以在for里面声明*/
for(i=0;i<n;i++) /*b17 for循环,i<5,也就是数组元素的n-1 */
printf("%s\n",name[i]); /*b18 数组元素逐个引用,并且以字符串的形式输出,直到条件结束*/
}
int main() /*b1 */
{
char *name[]={"Follow me","BASIC","Great wall","FORTRAN","computer design"}; /*b2 */
/*初始化一维指针数组*/
int n=5; /*b3 由于b2有5个下标,所以n=5*/
sort(name,n); /*b4 调用sort函数,把name数组和n作为实参给sort函数*/
print(name,n); /*b14 上面的函数执行完了,返回主函数的这一段,同样把实参给了print函数 */
return 0; /*b19 无异常,返回0,结束*/
}