草庐IT

从 int* 到 void* 到 char* 的 C++ static_cast - 你能帮我理解这段代码吗?

我是C++的初学者,我在理解某些代码时遇到了问题。我有一个练习要做,编写返回int大小的函数,并且不使用sizeof()和reinterpret_cast。有人给了我解决方案,但我不明白它是如何工作的。你能帮我理解吗?这是代码:intintSize(){intintArray[10];int*intPtr1;int*intPtr2;intPtr1=&intArray[1];intPtr2=&intArray[2];//Whycastintpointertovoidpointer?void*voidPtr1=static_cast(intPtr1);//whycastvoidpointe

c++ - "int *a[5]"和 int(*a)[5]” 有什么区别?

这个问题在这里已经有了答案:Cpointertoarray/arrayofpointersdisambiguation(13个答案)关闭8年前。它们在C和C++上的工作方式会有所不同吗?

c++ - 为什么 sizeof(int) 与 sizeof(int*) 不同?

我想知道为什么在下面的程序中sizeof(int)返回的值与sizeof(int*)不同。这是小程序:intmain(){std::cout这是输出:48直到现在我还记得整数指针的大小是4byte(gcc编译器)。如何检查指针的正确大小?是否依赖于计算机?我正在运行ubuntu12.04#lsb_release-aDistributorID:UbuntuDescription:Ubuntu12.04LTSRelease:12.04Codename:precise指针的大小不是常量(标准大小)8字节。 最佳答案 int和int*的大小

c++ - 针对 unsigned int 上的一元运算的编译器警告

我有生成以下警告的示例代码(带有SP1的VS2008编译器):warningC4146:unaryminusoperatorappliedtounsignedtype,resultstillunsigned代码:voidf(intn){}intmain(){unsignedintn1=9;f(-n1);}但是既然函数f将它的参数作为一个int,那么这段代码不应该在没有任何警告的情况下编译吗? 最佳答案 如果x类型为unsignedint,那么-x也是它实际上等同于2n-x(其中n最有可能是32)。为避免警告并获得正确的行为,转换为i

c++ - 将非空终止的 char* 转换为 int

我正在编写一些读取数据文件的代码。该文件经常包含以ASCII编码的各种长度的数值,我需要将其转换为整数。问题是它们不是空终止的,这当然会导致atoi出现问题。我一直使用的解决方案是在字符序列中手动附加一个null,然后进行转换。这是我一直在使用的代码;它工作正常,但看起来很笨拙。char*append_null(constchar*chars,constintsize){char*tmp=newchar[size+2];memcpy(tmp,chars,size);tmp[size+1]='\0';returntmp;}intatoi2(constchar*chars,constint

c++ - 为什么 int* ptr_arr_int = {1,2};在 C/C++ 中不起作用?

为什么int*ptr_arr_int={1,2};给出编译器错误,而char*ptr_arr_char="amruth";编译正常?int*ptr_arr_int={1,2};//->ERRORchar*ptr_arr_char="amruth";//->OK 最佳答案 "amruth"在C++中是一个constchar[7]类型,在C中是一个char[7]类型(尽管尝试修改字符串的行为未定义)。在某些情况下,这可以退化为constchar*或char*类型,例如您的情况。尽管int[2]在某些情况下会类似地衰减为int*,但{1,

c++ - 为什么 clang 不警告从 double 到 int 的隐式转换,而是在从 long 到 int 时警告?

在下面的代码中:#includeintmain(){constlongl=4294967296;inti=l;returni;//justtosilencethecompiler}编译器警告隐式转换(使用-Wall和-std=c++14)如下:warning:implicitconversionfrom'constlong'to'int'changesvaluefrom4294967296to0[-Wconstant-conversion]没关系。但是如果是double转int则没有警告,如下代码:#includeintmain(){constdoubled=4294967296.0;

c++ - 在溢出的情况下,i++ 是否会为小于 int 的有符号类型调用未定义的行为?

很明显,由于算术溢出,以下代码调用了未定义的行为:#includeinttest(void){inti=INT_MAX;i++;/*undefinedbehavior*/returni;}但是小于int的签名类型呢?例如short或signedchar?(更小的,我分别假设SCHAR_MAX和SHRT_MAX)。下面哪个函数会调用未定义的行为,为什么?signedchartest2(void){signedchari=SCHAR_MAX;i=i+1;/*implementationdefined*/returni;}signedchartest3(void){signedchari=S

c++ - C/C++ : How does int array[10]={0} work?

这个问题在这里已经有了答案:howdoesarray[100]={0}settheentirearrayto0?(4个答案)关闭5年前。我想知道intarray[10]={0}是如何工作的?是不是就这样一直走遍整个数组?for(inti=0;i还是效率更高?

c# - 如何将 vector<int> 从 C++ dll 编码到 C# 应用程序?

我有一个C++函数可以生成一个有趣的矩形列表。我希望能够从C++库中获取该列表并返回到调用它的C#应用程序中。到目前为止,我正在像这样对矩形进行编码:structImagePatch{intxmin,xmax,ymin,ymax;}然后对一些vector进行编码:voidMyFunc(...,std::vector&rectanglePoints){std::vectorpatches;//thisisfilledwithrectanglesfor(i=0;i与C#交互的header看起来像(并且适用于许多其他功能):extern"C"{__declspec(dllexport)voi