作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给出了以下结构:
typedef struct {
int a;
int b;
int c;
} POST, *PPOST;
int compare_post( PPOST pp, POST p);
它检查“数组” pp 中是否存在相同的 p 副本,该副本以空指针结尾。
int compare_post( PPOST pp, POST p) {
while( pp ){
if((pp->a == p.a )&&(pp->b == p.b )&&(pp->c == p.c ))
return 1;
pp++;
}
return 0;
}
while(pp)
使用而不是
while(*pp)
?
最佳答案
赋值没有意义,因为函数原型(prototype)int compare_post( PPOST pp, POST p);
作业中提到的没有意义。函数参数pp
不能是指向以 NULL
终止的数组的第一个元素的指针指针。如果一个数组被 NULL
终止指针,数组必须有一个指针数据类型,即它必须是一个指针数组。但是,如果数组具有指针数据类型,则指向该数组第一个元素的指针必须是指向指针的指针。也就是说,pointer indirection 必须有两个层次。 .因此,必须将函数的第一个参数更改为以下内容:int compare_post( PPOST *pp, POST p );
这相当于:int compare_post( POST **pp, POST p );
为了清楚起见,因为 some people consider creating typedefs for pointers inappropriate ,我将使用第二种语法。
使用这个新的函数原型(prototype),正确答案如下:
int compare_post( POST **pp, POST p ) {
while ( *pp ) {
if ( ( (*pp)->a == p.a ) && ( (*pp)->b == p.b ) && ( (*pp)->c == p.c ) )
return 1;
pp++;
}
return 0;
}
关于c - 如何遍历C中的结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60688172/
我是一名优秀的程序员,十分优秀!