指针系列目录
C语言指针基础知识点(一)–指针及指针变量
C语言指针基础知识点(二)–指针变量的引用
C语言指针基础知识点(三)–指针变量作为函数参数
C语言指针基础知识点(四)–通过指针引用数组
C语言指针基础知识点(五)–用数组名作函数参数
C语言指针基础知识点(六)–通过指针引用多维数组
C语言指针基础知识点(七)–通过指针引用字符串
C语言指针基础知识点(八)–返回指针值的函数
C语言指针基础知识点(九)–指针数组和多重指针
C语言指针基础知识点(十)–动态内存分配与指向它的指针变量
返回指针值的函数
栗子1:
有a个学生,每个学生有b门成绩。要求在用户输入学生的学号后,能输出该学生的全部成绩。用指针函数实现。
方法1:
# include<stdio.h>
int main()
{
float *search(float (*pointer)[4], int m);
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float * p;
int i,k;
printf("Enter the number of student:");
scanf("%d",&k);
printf("The score of No.%d are:\n",k);
p=search(score,k);
for(i=0;i<4;i++)
printf("%5.2f\t", *(p+i));
printf("\n");
return 0;
}
float *search(float (*pointer)[4], int m)
{
float *pt;
pt = *(pointer+m);
return pt;
}
方法2:
# include<stdio.h>
int main()
{
float *search(float score[][4], int m);
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float * p;
int i,k;
printf("Enter the number of student:");
scanf("%d",&k);
printf("The score of No.%d are:\n",k);
p=search(score,k);
for(i=0;i<4;i++)
printf("%5.2f\t", *(p+i));
printf("\n");
return 0;
}
float *search(float score[][4], int m)
{
float *pt;
pt = &score[m-1][4]; // 根据指针指向与实际数据,因此减1
return pt;
}
栗子2:
找出其中有不及格学生的成绩及其序号
# include<stdio.h>
int main()
{
float *search(float (*pointer)[4]);
float score[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float * p;
int i,j;
for(i=0;i<3;i++)
{
p=search(score+i);
if (p==*(score+i))
{
printf("No.%d score:",i);
for(j=0;j<4;j++)
printf("%5.2f ",*(p+j));
printf("\n");
}
}
return 0;
}
float *search(float (*pointer)[4])
{
int i;
float *pt;
pt = NULL;
for(i=0;i<4;i++)
if (*(*pointer+i)<60)
pt = *pointer;
return pt;
}