c++ - "difference of memory address?"是什么意思

标签 c++ c

考虑

#include <cstdio>

int main() {
    char a[10];
    char *begin = &a[0];
    char *end = &a[9];
    int i = end - begin;
    printf("%i\n", i);
    getchar();
}

#include <cstdio>

int main() {
    int a[10];
    int *begin = &a[0];
    int *end = &a[9];
    int i = end - begin;
    printf("%i\n", i);
    getchar();
}

#include <cstdio>

int main() {
    double a[10];
    double *begin = &a[0];
    double *end = &a[9];
    int i = end - begin;
    printf("%i\n", i);
    getchar();
}

以上三个例子都打印了9

我可以知道,我应该如何解释9的含义。它是什么意思?

最佳答案

9 表示 &a[9] 和 &a[0] 之间类型为 'T' 的元素的数量(其中 T 依次为 char、int、double)。

它们之间的实际字节数是(&a[9] - &a[0])*sizeof(T)。请注意,根据定义,sizeof(char) 为 1。进一步注意一个字节不是必须是 8 位的。 相反,它是一些 8 位内存位置,用于保存实现的基本字符集中的所有字符。

编辑:正如@pmg 所指出的,一个字节被定义为一个内存位置,其宽度足以容纳实现的基本字符集中的所有字符。

关于c++ - "difference of memory address?"是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3767757/

相关文章:

c++ - 是否可以用 C 或 C++ 实现小型磁盘操作系统?

c++ - 程序可以在调用 kill 函数之前返回/终止吗?

c - as400/IBM I 上的 pthread 错误代码 3029?

c++ - 静态智能指针 - 是或否?

c++ - 当 C++ mex 文件完成并将数据传回 MATLAB 时是否有开销?

c - 读取一行时忽略空格或换行符

c - RegEnumKeyEx 不能正常工作

c++ - 使用 MSYS 构建 libcurl

c++ - 用私有(private)基函数覆盖公共(public)虚函数?

c++ - 使用 win32 构建 C++ 代码的任何提示?