这是一本书我读学习Objective-C中的一部分。
以下定义了一个名为MAX宏给出最大两个值之一: #define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
再就是在询问读者定义一个宏(本书一些练习MIN
),以找出最小的两个值,另一个是要求来定义宏调用MAX3
给出最大3个的值。 我认为这两个定义将类似于MAX
,但我不知道该怎么MAX
的公式查找最大值。 我的意思是,如果我只是做了这个
int limits = MAX (4,8)
它只会分配limits
的8值是什么有找到一个变量的最大值呢?
我想你混淆了价值与变量。 你列出的宏示例扩展到两个值之间的比较,返回两个值中的较大(即,较大, a
或b
)。 所以,你是对的, int limits = MAX(4,8)
只是分配8
至limits
,有没有关系找到你可以存储的最大值limits
。
头limits.h中定义了许多值一样INT_MAX
会告诉你关于你的系统上的最小/最大变量类型的值的信息。
为了打破它拆开:
声明:
#define MAX(a,b)
如果a
大于b
,用a
别人使用b
:
( ((a) > (b)) ? (a) : (b) )
然后创建一个MIN
表达,使用了类似的形式:
#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
^
然后创建一个MAX3
的表情,你可以将它们组合起来:
#define MAX3(a,b,c) ( MAX(a, MAX(b,c)) )
具体地,该宏的旨在与可使用进行比较的标量(C建宏)中使用<
或>
。 如果你通过了objc变量,它会导致地址比较和MAX将返回具有较高地址的一个(这将是非常罕见的,如果你真的想比较objc实例的地址)。
另外请注意,这是宏如何咬你一个经典的例子。 用宏,预处理器简单地扩展(文本复制/粘贴)的参数在适当位置,所以: int limits = MAX (4,8)
从字面上膨胀以int limits = (4 > 8 ? 4 : 8)
如果写MAX(x,++y)
然后y
将递增两次,如果y
大于或等于x
,因为它扩展为: int limits = (x > ++y ? x : ++y)
。
通常,将使用一个MAX()或MIN()宏得到以较高者为准/一对变量的下部,或一个可变的和恒定的,或甚至一对宏常数或其他非字面常量表达式的。 你,你在你的问题做了一般不会提供2个字面常量。
算法MAX(目标C)
// get max value
- (float)maxValue:(NSArray *)arrValue
{
float maxValue = 0.0;
for (NSString *value in arrValue) {
float compareValue = [value floatValue];
if (compareValue > maxValue) {
maxValue = compareValue;
}
}
return maxValue;
}
NSArray *number=[NSArray arrayWithObjects:[NSNumber numberWithFloat:57.02], [NSNumber numberWithFloat:55.02], [NSNumber numberWithFloat:45.02], nil];
NSLog(@"%f", [self maxValue:number]);
result 57.020000