系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。
喜欢的同学记得点赞、转发、收藏哦~
后续C语言经典100例将会以pdf和代码的形式发放到公众号
欢迎关注:计算广告生态 即时查收
1 题目函数:search()
功能:查找成绩不及格的学生
描述:有 4 名学生的成绩,找出至少有一科不及格的学生,并将成绩列表输出(规定60以下为不及格)
目标:重点理解 int (*p)[N] 的使用方法
2 思路
int*p[5] 和 int(*p)[5] 的区别
- int *p[5],首先它是一个数组,它的大小是5,p里面存放的数据都是类型是int *,也就是整型指针。 所以它叫指针数组。
- int (*p)[5],首先p是一个指针,指向大小为5的数组,因此这叫数组指针。通常用在二维数组的操作上注意指针的类型,从 int(*p)[5] 可以看到, p 的类型不是int *, 而是 int(*)[5],p 被定义为指向一维数组的指针变量,里面有 5 个元素,因此,p 的基类型是一维数组,长度为 20 字节。*(p 2) 3, 括号中的 2 是指的以 p 的基类型(一维整型数组)的长度为单位的,即,p 每增加 1,地址就增加 20 个字节(5 个元素,每个元素4个字节)。而 *(p 2) 3 括号外的数字 3,不是以 p 的基类型的长度为单位的,而是一维数组的下一个位置
- 先看一个简单的引例
#include <stdio.h>
void search(float (*p)[4], int n) {
printf("序号为 %d 的学生的成绩:\n", n);
for (int i = 0; i < 4; i) {
printf("%5.2f ", *(*(p n) i));
}
}
int main(int argc, char const *argv[]) {
float score[3][4]={{60,75,82,91},{75,81,91,90},{51,65,78,84}};
search(score, 2); // 计算得出序号为 2 的学生的成绩
getchar();
}
~~~~~~~~~~~操作结果~~~~~~~~~~~~
$ gcc ex022-1.c -o demo
./yaojianguodeMacBook-Pro:C语言100题集合代码 yaojianguo$ ./demo
序号为 2 的学生的成绩:
51.00 65.00 78.00 84.00
#include<stdio.h>
#include<stdlib.h>
#defineN5
/**
函数:search()
功能:查找成绩不及格的学生
描述:有4名学生的成绩,找出至少有一科不及格的学生,并将成绩列表输出(规定60以下为不及格)
**/
int*search(int(*p)[N]){
int*pt=*(p 1);
for(inti=0;i<4; i){
if(*(*(p 0) i)<60){//这块可以写成*(*p i)<60,也就是平常看到了*(*(p m) n))来取到二维数组中列向的值
pt=*p;
}
}
returnpt;
}
intmain(intargc,charconst*argv[]){
int*p;
intscore[][N]={{60,75,82,91},{75,81,91,90},{51,65,78,84},{65,72,78,72},{75,70,98,92}};//四个学生的成绩
for(inti=0;i<N; i){
p=search(score i);
if(p==*(score i)){
printf("成绩不及格学生的成绩分别是:\n");
for(intj=0;j<4; j){
printf("%d",*(p j));
}
}
}
getchar();
}
示例结果:
$gccex022.c-odemo
$./demo
成绩不及格学生的成绩分别是:
51657884
--END--
喜欢本文的同学记得点赞、转发、收藏~
更多内容,欢迎大家关注我们的公众号:计算广告生态
后续C语言经典100例将会以pdf和代码的形式发放到公众号
同时也带来更多系列文章以及干货❤️!
,