gpt4 book ai didi

c - 无法理解 sizeof

转载 作者:行者123 更新时间:2023-12-04 09:31:15 27 4
gpt4 key购买 nike

#include <stdio.h>

int main (int argc, const char * argv[])
{
static struct item
{
char code;
float price;
}
table[] =
{
{'a', 3.29},
{'b', 2.99},
{'c', 0.59},
{'d', 1.59},
{'e', 2.39}
};

char item_code[2];
int quantity;
int i;

do {
printf("Enter item code: ");
scanf("%1s", item_code);

if (*item_code != '.') {
for (i=0; i< sizeof(table)/sizeof(struct item)
&& table[i].code != *item_code; i++);

if (i < sizeof(table)/sizeof(struct item)) {
printf("Enter quantity: ");
scanf("%d", &quantity);
printf("\nUnit price = %.2f, total price = %.2f.\n\n\n",
table[i].price, quantity * table[i].price);
}
else
printf("\nItem code %c does not exist. \n\n\n", *item_code);
}
} while (*item_code != '.');
printf("Thank you.\n");
return 0;
}

我是新手。我无法理解上述程序中的第二个“for 循环”。为什么要使用 sizeof?每次执行循环时“i”的值究竟是多少?
谢谢。

最佳答案

让我们在一个整数为四个字节长的系统中检查一些简单的代码:

int xyzzy[] = {3,1,4,1,5,9,2,6,5,3,5,8,9};       // 13 integers
printf ("%d\n"", sizeof(xyzzy)); // 13 * 4 = 52
printf ("%d\n"", sizeof(int)); // 4
printf ("%d\n"", sizeof(xyzzy) / sizeof(int)); // 52 / 4 = 13

根据最后一行,该计算是获取数组中项目数的一种方法。

顺便说一句,我更喜欢构造:
sizeof(xyzzy) / sizeof(*xyzzy)

因为即使我更改 xyzzy 的类型,它也会继续工作至 double例如。这意味着我只需要更改声明变量的那一行,而不是寻找所有的大小计算。

事实上,我什至有一个最喜欢的宏:
#define numof(x) (sizeof(x) / sizeof(*x))

使我的代码更小。

for而言循环完全正确(顺便说一下,它在技术上不是第二个 for 循环,因为只有一个,但它是第二个循环),它基本上迭代了 i 的每个值(从 0 开始,第一个索引)直到它到达最后一个元素之外的点,或者找到具有所需项目代码的元素。

退出该循环时, i如果未找到项目代码,将设置为元素数,如果找到,则设置为正确的索引,因此 if紧随其后的声明 for环形。

关于c - 无法理解 sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8570216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com