objective-c - 在 Unix 中使用 double ?

标签 objective-c c macos unix

我正在调用 sysctl() 来检索 mem 统计信息,对于 void* oldVal 参数,我传递一个指向 double 的指针。然而,它没有将 double 设置为正确的值,而是将其设置为 0.00000

但是,当我尝试用 long 做完全相同的事情时,它会将其设置为正确的统计数据。为什么 double 被设置为 0.00000,而 long 被设置为正确的统计数据?

    int systemInfoNeeded[2] = {CTL_HW, HW_PHYSMEM};
    size_t sizeOfBuffer = sizeof(totalAmount);

    if (sysctl(systemInfoNeeded, 2, &totalAmount, &sizeOfBuffer, NULL, 0)) 
    {
        NSLog(@"Total memory stat retrieval failed.\n");
        exit (EXIT_FAILURE);
    }

totalAmount 是 double 的。第二次我将totalAmount的类型更改为long,它工作得很好。无论如何,我可以让双重工作吗?我想直接发送 totalAmount,而不是发送一个 long,然后将值分配给 totalAmount

我在 Mac OS X Snowleopard 上使用 Objective-C/C 和 Xcode 3.2.6

最佳答案

你不能只选择你最喜欢的数据类型并传递一个指向它的指针; sysctl 调用需要一个指向整数的指针,因此您必须提供该指针。如果将指针传递给 double 型,那么您将得到一个 double 型,其中包含将值表示为整数的位 - 结果是乱码。

关于objective-c - 在 Unix 中使用 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269510/

相关文章:

ios - Today Widget Extension 中经常出现 "Unable to load"

ios - iPhone - 我们能否判断通知样式是否设置为 'Banner' 还是 'Alerts'

C:为什么宏展开不是递归发生的?

c++ - 32 位 int 类型的 Win API 互锁操作

c - 在堆栈上使用 realloc()

ios - Core Data + iCloud Sync 确实改变了商店通知不刷新 UI

objective-c - 将不可编辑的 NSTextField 作为标签添加到另一个 NSTextField 中

objective-c - 如何避免GC环境中自定义NSURLProtocol中_NSCFURLProtocolBridge中的引用计数下溢

Java路径zeromq设置

cocoa - 查找带有 Interface Builder 插件的框架的好地方......