printf("%ld\n",sizeof(a+b))为什么等于4
时间: 2024-05-18 17:16:18 浏览: 70
这是因为在 C 语言中,数组名和指针变量都是表示地址的,它们在参与加法运算时,实际上是把地址和一个整数相加,得到的结果仍然是一个地址,而不是数组和指针的和。因此,sizeof(a+b) 实际上是 sizeof(int),因为整数类型在大多数机器上占据 4 个字节。所以,printf("%ld\n",sizeof(a+b)) 的结果是 4。
相关问题
#include<stdio.h> struct A { int a; char b; float c; char name[10]; }; int main(void) { printf("%ld\n",sizeof(struct A)); return 0; }为什么结果是24
结构体的大小是由其成员变量的大小和对齐方式决定的。在本例中,结构体 `A` 的成员变量依次为整型变量 `a`、字符型变量 `b`、单精度浮点型变量 `c`、字符数组 `name`,其中 `a` 占4个字节,`b` 占1个字节,`c` 占4个字节,`name` 占10个字节。由于对齐方式的影响,`b` 后面会填充3个字节,`name` 后面会填充2个字节,以保证结构体的成员变量对齐。因此,结构体 `A` 的大小是 4 + 1 + 4 + 10 + 3 + 2 = 24 字节。
帮我检查一下代码中的错误:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<string> #include<algorithm> using namespace std; long long N[1000005]; long long Q[1000005]; int cmp(const void* a, const void* b) { return *(long long*)a - *(long long*)b; } int main() { int n, q, Ai, xi; long long response = 0; scanf("%d%d", &n, &q); for (int i = 0; i < n; i++) { scanf("%ld", &Ai); N[i] = Ai; } for (int i = 0; i < q; i++) { scanf("%ld", &xi); Q[i] = xi; } qsort(N, n, sizeof(long long), cmp); for (int i = 0; i < q; i++) { int count = 1; response = N[n-count]; if (response >= Q[i]) printf("%d\n", count); else { while (response < Q[i]) { count++; response += N[n - count]; } printf("%d\n", count); } } }
在代码中存在以下错误:
1. `#include<iostream>` 库不应该被包含,因为代码中并没有使用到 `iostream` 库的任何函数。
2. `scanf("%ld", &Ai)` 和 `scanf("%ld", &xi)` 的格式控制符应该改为 `%lld`,因为 `Ai` 和 `xi` 是 `long long` 类型的。
3. 在 `qsort` 函数中,`sizeof(long long)` 应该改为 `sizeof(long long int)`,因为 `long long` 和 `long long int` 是等价的,但是 `sizeof` 操作符需要一个完整的类型名称。
4. 在 `printf("%d\n", count)` 中,输出的应该是 `long long` 类型的 `count`,格式控制符应该改为 `%lld`。
修改后的代码如下:
```c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
long long N[1000005];
long long Q[1000005];
int cmp(const void* a, const void* b) {
return *(long long int*)a - *(long long int*)b;
}
int main() {
int n, q, Ai, xi;
long long response = 0;
scanf("%d%d", &n, &q);
for (int i = 0; i < n; i++) {
scanf("%lld", &Ai);
N[i] = Ai;
}
for (int i = 0; i < q; i++) {
scanf("%lld", &xi);
Q[i] = xi;
}
qsort(N, n, sizeof(long long int), cmp);
for (int i = 0; i < q; i++) {
int count = 1;
response = N[n - count];
if (response >= Q[i])
printf("%lld\n", count);
else {
while (response < Q[i]) {
count++;
response += N[n - count];
}
printf("%lld\n", count);
}
}
return 0;
}
```
阅读全文