通过指针访问时的字节大小

Mas*_*seb 2 c++ pointers arduino sizeof


我正在研究一个Arduino项目.我正在尝试将a传递byte pointer给a function,并让它function计算指针引用的数据的大小.但是,当我让指针引用一个字节时,sizeof()返回2.我编写了以下代码片段来尝试调试:

byte b;
byte *byteptr;
byteptr = &b;

print("sizeof(b): ");
println(sizeof(b));

print("sizeof(*byteptr) pointing to byte: ");
println(sizeof(*byteptr));

print("sizeof(byteptr) pointing to byte: ");
println(sizeof(byteptr));
Run Code Online (Sandbox Code Playgroud)

打印结果是:

sizeof(b): 1
sizeof(*byteptr) pointing to byte: 1
sizeof(byteptr) pointing to byte: 2
Run Code Online (Sandbox Code Playgroud)

所以一个字节的大小是1,但是通过指针它是2?

小智 7

似乎在Arduino上,指针是16位.我相信你的困惑源于*这方面的意义.

sizeof(*byteptr)相当于sizeof(byte).在*不指示指针类型,表示解除引用存储在byteptr指针.因此,它是1个字节,您可以从该类型中获得byte.

sizeof(byteptr) 不取消引用指针,因此,指针本身的大小,在这个系统上似乎是2字节/ 16位.

考虑以下:

#include "iostream"

using namespace std;

int main()
{
    char a = 1;
    char* aP = &a;

    cout << "sizeof(char): " << sizeof(char) << endl;
    cout << "sizeof(char*): " << sizeof(char*) << endl;
    cout << "sizeof(a): " << sizeof(a) << endl;
    cout << "sizeof(aP): " << sizeof(aP) << endl;
    cout << "sizeof(*aP): " << sizeof(*aP) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出(在64位OS /编译器上):

sizeof(char): 1
sizeof(char*): 8
sizeof(a): 1
sizeof(aP): 8
sizeof(*aP): 1
Run Code Online (Sandbox Code Playgroud)