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)