Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针类型转换c++; #包括 #定义打印(x)标准::cout_C++_Arrays_Char_Sizeof - Fatal编程技术网

C++ 指针类型转换c++; #包括 #定义打印(x)标准::cout

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

它取决于您使用的体系结构。根据定义,char是大小为1的类型,因此sizeof(char)的计算结果为1,但它并不自动表示为8位

要访问下一个值,必须将sizeof(int)添加到指针中,以使代码独立于所使用的体系结构工作


当您使用指针时,您会告诉编译器指针指向的值占用内存中该类型的空间,内存中的下一个内容应该在该数量的单位(字节)之后。因此,如果您将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]);
}