sizeof(X)等于sizeof(s)+sizeof(i) + sizeof(c)是对的吗
时间: 2024-02-29 08:49:28 浏览: 54
不完全正确。在C++中,`sizeof(X)`表示类型`X`的对象所占用的内存大小,而`sizeof(s)+sizeof(i) + sizeof(c)`表示`s`、`i`和`c`三个变量分别占用的内存大小之和。
然而,由于内存对齐的原因,结构体或类的大小可能会比其成员变量的大小之和要大。这是因为编译器会在成员变量之间插入一些填充字节,以保证对齐要求。因此,`sizeof(X)`可能会大于`sizeof(s)+sizeof(i) + sizeof(c)`。
如果想要准确地计算结构体或类的大小,可以使用`sizeof`运算符来获取。例如,`sizeof(X)`可以直接得到类型`X`的大小。
相关问题
#include<iostream> using namespace std; typedef struct Point { int x, y; }P; P points[100]; int flag[100] = { 0 }; //排列算法 bool sortP(P p1, P p2) { if (p1.x == p2.x) return p1.y > p2.y; else return p1.x > p2.x; } int S(P p1, P p2, P p) { return 0.5 * ((p1.x * p2.y - p2.x * p1.y) + (p2.x * p.y - p.x * p2.y) + (p.x * p1.y - p1.x * p.y)); } P hull(P p,int mode) { int finalP[100]; if (sizeof(p) <= 2) { for (int i = 0; i < sizeof(p); i++) { flag[i] = 1; } for (int i = 0; i < sizeof(p); i++) { if (flag[i] = 1) { for (int j = 0; j < sizeof(finalP); j++) { finalP[j] = p[i]; } } } } }
这段代码是一个求凸包的算法,其中使用了结构体 Point 来存储点的坐标,使用 flag 数组来标记点是否被访问过。其中的 sortP 函数是用来进行排序的,按照 x 坐标从大到小排列,如果 x 坐标相同则按照 y 坐标从大到小排列。S 函数是用来计算三个点组成的三角形的面积的,最后的 hull 函数是用来求凸包的核心函数。当点的数量小于等于 2 个时,直接返回这些点;否则需要找到最左下角的点作为起点,然后按照顺时针方向扫描所有点,用 flag 数组来标记是否被访问过,最后将所有被访问过的点存储在 finalP 数组中,最后返回 finalP 数组。
优化这句代码 for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
可以将`sizeof(arr) / sizeof(int)`提取到一个变量中,避免重复计算。
```c
#include <stdio.h>
int main() {
int arr[] = {3, 7, 8, 9, 10, 4, 5};
int n = sizeof(arr) / sizeof(int);
int sum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
sum += arr[i];
}
}
printf("所有偶数的和为:%d\n", sum);
return 0;
}
```
输出结果为:
```
所有偶数的和为:22
```
阅读全文