C語言練習(xí)


[例9.5] 通過函數(shù)指針調(diào)用函數(shù)
int max(int x,int y)
{ return x>y?x:y;
}
int min(int x,int y)
{ return x<y?x:y;
}
main()
{ int a,b,c,d;
int (*p)(); /* 定義函數(shù)指針p,它可以指向一個(gè)整型函數(shù) */
scanf("%d,%d",&a,&b);
p=max; /* p指向max函數(shù) */
c=(*p)(a,b); /* 調(diào)用p所指函數(shù)max */
p=min; /* p指向min函數(shù) */
d=(*p)(a,b); /* 調(diào)用p所指函數(shù)min */
printf("Max=%d ,Min=%d\n",c,d);
}

下標(biāo)法訪問數(shù)組:
main()
{ int a[5],i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
printf("%d? ",a[i]);
printf("\n");
}

通過數(shù)組名計(jì)算數(shù)組元素的地址,即*(a+i)或*(p+i)形式
main()
{ int a[5],i;
int *p=a;
for(i=0;i<5;i++)
scanf("%d",p+i); /* p+i與a+i等價(jià),即&a[i] */
for(i=0;i<5;i++)
printf("%d? ",*(p+i)); /* *(p+i)與*(a+i)等價(jià),即a[i] */
printf("\n");
}

用指針變量處理數(shù)組元素,即p++形式
main()
{ int a[5],i;
int *p=a;
for(i=0;i<5;i++)
{ scanf("%d",p); /* 可以合并成一句:scanf(“%d”,p++); */
p++;
}
p=a; /* 指針重新指向數(shù)組開始處 */
for(i=0;i<5;i++)
{ printf("%d? ",*p); /* 可以合并成一句:printf(“%d? “,*p++); */
p++;
}
printf("\n");
}

[例9.7] 對(duì)例7.8的形參數(shù)組改為指針。
int array_max(int *x,int n) /* x原為形參數(shù)組,現(xiàn)改為指針 */
{ int i,m=x[0];
for(i=1;i<n;i++)
if(m<x[i]) m=x[i];
return m;
}
main()
{ int a[]={8,7,55,23,49};
int max;
max=array_max(a,5); /* 數(shù)組名作實(shí)參,傳遞該數(shù)組的首地址 */
printf("Max=%d\n",m);
}

[例9.8] 指針數(shù)組的簡(jiǎn)單使用
main()
{ int a[5]={1,3,5,7,9};
int *num[5],i;
for(i=0;i<5;i++)
num[i]=&a[i];
for(i=0;i<5;i++)
printf("%d? ",*num[i]);
printf("\n");
}

[例9.9] 數(shù)組的輸出
main()
{ int a[5]={1,3,5,7,9};
int *num[5],i;
int **p;
for(i=0;i<5;i++)
num[i]=&a[i];
p=num;
for(i=0;i<5;i++)
printf("%d ",**p++);
printf("\n");?
}

[例9.10] 測(cè)定字符串的長(zhǎng)度
main()
{
char str[]="China",*p;
int len;
p=str;
for(len=0;*p!=’\0’;len++)p++;
printf("%s的長(zhǎng)度為%d\n",str,len);
}

