C++ 指针类型转换c++; #包括 #定义打印(x)标准::cout
它取决于您使用的体系结构。根据定义,char是大小为1的类型,因此sizeof(char)的计算结果为1,但它并不自动表示为8位 要访问下一个值,必须将sizeof(int)添加到指针中,以使代码独立于所使用的体系结构工作C++ 指针类型转换c++; #包括 #定义打印(x)标准::cout,c++,arrays,char,sizeof,C++,Arrays,Char,Sizeof,它取决于您使用的体系结构。根据定义,char是大小为1的类型,因此sizeof(char)的计算结果为1,但它并不自动表示为8位 要访问下一个值,必须将sizeof(int)添加到指针中,以使代码独立于所使用的体系结构工作 当您使用指针时,您会告诉编译器指针指向的值占用内存中该类型的空间,内存中的下一个内容应该在该数量的单位(字节)之后。因此,如果您将int指针强制转换为char指针,您应该向char指针添加sizeof(int),以获得与向int指针添加1相同的效果。这是因为根据定义,char
当您使用指针时,您会告诉编译器指针指向的值占用内存中该类型的空间,内存中的下一个内容应该在该数量的单位(字节)之后。因此,如果您将int指针强制转换为char指针,您应该向char指针添加sizeof(int),以获得与向int指针添加1相同的效果。这是因为根据定义,char自动为1个单位,如果您使用char以外的任何东西,这都不起作用,没有与体系结构无关的类型大小规范。您的问题在哪里?
sizeof(char)
为1,sizeof(char*)
依赖于平台(在大多数系统上为4或8)println(sizeof(char*)
是4或8字节,基于体系结构。可能您的教授在char
第13行中提到过它,但它只会可靠地修改ex[2]
,如果sizeof(int)
是4
,则给它一个4
的值。虽然sizeof(char
是1
(根据定义)其他类型的大小(例如sizeof(char*)
和sizeof(int)
都是实现定义的)。谢谢您的解释!
#include <iostream>
#define print(x) std::cout << x;
#define println(x) std::cout << x << std::endl;
int main() {
int ex[5];
int* ptr = ex;
for (int i = 0; i < 5; i++) {
ex[i] = 2;
}
ex[2] = 3;
*(int*)((char*)ptr + 8) = 4;
println(ex[2]);
}