/*********************************************************************************************
注意:函數指針變量與指針函數的區別:
函數指針:指向函數的指針變量
指針函數:返回指針也就是地址的函數他們側重點不一樣
**********************************************************************************************/
//函數指針變量
#if 0
int max(int a,int b)
{
if( a 》 b ) return a;
else return b;
}
void main(void)
{
int x,y,z;
int ( *pfun )(int,int); //定義函數指針變量
ser_init();
printf(“input two numbers:n”);
scanf(“%d%d”,&x,&y);
pfun = max; //把函數名(函數入口地址)賦給函數指針變量
z=(*pfun)(x,y); //調用函數指針變量,實參x和y的值傳遞給形參a和b
printf(“max=%dn”,z); //形參a和b的值發生交換存儲在max函數存儲區,因為pfun指針變量指向函數max首地址
} //所以z取得max函數的最大值
#endif
//--------------------------------------------------------------------------------------------
#if 0
//返回指針的函數,函數返回值為地址
char *day(int n)
{
static char *weekday[ ]={ //指針數組由指針元素組成
“Illegal day”,
“Monday”,
“Tuesday”,
“Wednesday”,
“Thursday”,
“Friday”,
“Saturday”,
“Sunday”
};
if( n《0||n》6) return weekday[0] ; //返回指針元素也就是地址
else return weekday[n];
}
void main(void)
{
while(1)
{
if(!bflag)
{
int i;
// char *day(int n); //指針函數聲明
ser_init();
printf(“input No.:n”);
scanf(“%d”,&i);
printf(“Num=%d---》Day=%sn”,i,day(i));
bflag = 1;
}
}
}
#endif
//---------------------------------------------------------------------------------
#if 0
void main(void)
{
char string[]=“I love you!”; //字符數組訪問字符串
ser_init();
printf(“string = %s”,string);
}
void main(void)
{
char *string=“I love you! my baby”; //字符指針變量訪問字符串
ser_init();
printf(“string = %s”,string);
}
#endif
//---------------------------------------------------------------------------------
#if 0
//選擇法排序(由小到大排序)
void SelectSort(char *name[],int n) //形參指針數組---由指向字符的指針元素組成
{
int i,j,k; //k為中間變量,暫存下標號
char *ps; //中間指針變量,暫存值
for(i=0;i { // x0 x1 x2 x3 。。.x(n-1) x(n)
k = i; //從下標0開始選擇一個數,然后在后面的序列里比較,
//如果有小于前面的那個數就交換下標號
for(j=i+1;j {
if(strcmp(name[k],name[j])》0 ) k=j;
}
if(k!=i)
{ //后面序列有大于前面那個數
ps=name[i]; //name[]中的元素為指針地址
name[i]=name[k];
name[k]=ps;
}
}
}
void print(char *name[],int n)
{
int i;
for(i=0;i}
void main(void)
{
while(1)
{
if(!bflag)
{
int n;
static char *name[]={“CHINA”,“AMERICAN”,“ENGLANGD”,“JANPANESE”,“GERMANY”,“FRANCE”,“AUSTRALIAN”};
//定義指針數組:數組中的每個元素為一個指針
n=7;
ser_init();
SelectSort(name,n); //指針數組的首地址傳遞給形參變量
print(name,n);
printf(“%c”,*name[0]);
bflag = 1;
}
}
}
#endif
//----------------------------------------------------------------------------------------
#if 0
//選擇法排序(由小到大排序)
void SelectSort(int *name[],int n) //形參指針數組---由指向字符的指針元素組成
{
int i,j,k; //k為中間變量,暫存下標號
int *ps; //中間指針變量,暫存值
for(i=0;i { // x0 x1 x2 x3 。。.x(n-1) x(n)
k = i; //從下標0開始選擇一個數,然后在后面的序列里比較,
//如果有小于前面的那個數就交換下標號
for(j=i+1;j {
// if( strcmp(name[k],name[j]) 》 0 ) k=j;
}
if(k!=i)
{ //后面序列有大于前面那個數
ps=name[i]; //name[]中的元素為指針地址
name[i]=name[k];
name[k]=ps;
}
}
}
void print(int *name[],int n)
{
int i;
for(i=0;i}
void main(void)
{
while(1)
{
if(!bflag)
{
int n;
static int *name[]={11,22,33,44,55,66};
//name[0]=0xaa;
//name[1]=0xbb;
//name[2]=0xcc;
//name[3]=0xdd;
//name[4]=0xee;
//name[5]=0xff;
//定義指針數組:數組中的每個元素為一個指針
n=20;
ser_init();
SelectSort(name,n); //指針數組的首地址傳遞給形參變量
print(name,n);
bflag = 1;
}
}
}
#endif
//---------------------------------------------------------------------------------------
#if 0
//指向指針變量的指針變量
void main(void)
{
while(1)
{
if(!bflag)
{
int x,*p,**pp; //pp為 指向整型的指針變量 的指針變量
ser_init();
printf(“input one number:n”);
scanf(“%d”,&x);
p=&x;
// p=&x;
pp=&p;
// q=&x;
printf(“%dn”,*p); //變量x的值
printf(“%dn”,**pp); //變量x的值
bflag=1;
}
}
}
#endif
評論
查看更多