草庐IT

int_parser

全部标签

c++ - int (*p)[3] 和 int *p[3] 有什么区别?

这个问题在这里已经有了答案:Cpointertoarray/arrayofpointersdisambiguation(13个答案)关闭9年前。我完全理解什么是“int*p[3]”(p是一个包含3个指针的数组,这意味着我们可以通过将内存分配为我们的大小来拥有3行任意数量的整数不同的行)。我的困惑在于“int(*p)[3]”这意味着什么?是不是像“p”存储了3个连续内存的int或其他东西的地址?请说明以及如何在程序中使用use来区分它们。非常感谢。@revised很抱歉提出重复的问题。我没有深入研究我的疑问。但作为新手程序员,我的疑问仍然存在。我浏览了Q/A的两页Cpointertoar

c++ - 为什么要有一个指向指针的指针(int **a)?

int**a=malloc2d(M,N)//dynamicallyallocatesa2Darray用int**a代替int*a的目的是什么。我知道动态分配需要指针,但为什么要有指向指针的指针?对于一个3维数组应该是:int***a? 最佳答案 出于多种原因,您需要一个指向指针的指针。在您给出的示例中,使用双指针来存储二维数组。C中的二维数组被视为元素为一维的一维数组数组(行)。例如,一个4x3的T数组(其中“T”是某种数据类型)可能由:“Tmat[4][3]”声明,并由以下内容描述方案:+-----+-----+-----+mat

c++ - 将 int 转换为 void 指针并再次返回 int 是否安全?

在C和/或C++中:将int转换为void指针并再次转换回int是否安全?基于问题“C++:Isitsafetocastpointertointandlaterbacktopointeragain?”。 最佳答案 可能在大多数现代普通机器中。但是,我敢打赌,有些模糊的编译器或配置(例如,使用32位整数算法的16位寻址机器)并非如此。Auintptr_t不过,可以保证同时持有这两种类型,因此如果您愿意,请使用该类型。 关于c++-将int转换为void指针并再次返回int是否安全?,我们在

c++ - C++ 中 int* 和 int[] 的区别

上下文:C++考虑下面的例子classTestClass{private:intA[];int*B;public:TestClass();};TestClass::TestClass(){A=0;//Failsduetoerror:incompatibletypesinassignmentof`int'to`int[0u]'B=0;//Passes}A=0失败但B=0成功。有什么收获?A到底是什么?常量指针?那我该如何初始化呢? 最佳答案 问题“int*和int[]有什么区别?”是一个比大多数人会想到的更简单的问题:它取决于它的使用

c++ - 在不强制转换的情况下打印 time_t 为 long int 会产生意外行为

我正在尝试打印time_t而不是在MicrosoftVisualStudioProject中将其转换为longint并且它给了我意想不到的结果。源代码是#include#include#include#include#includeintmain(){inta=1,b=2;longintc=3;time_tmyTime;time(&myTime);printf("%d_%ld_%d_%ld",a,myTime,b,c);printf("\n");getchar();return0;}输出为1_1389610399_0_2。不过,这在我的Linux机器上运行良好。我知道time_t不应该

c++ - 为什么将 char 数组转换为 int 指针并使用指针写入它会使数据反转?

我创建了一些简单的代码来测试将char数组转换为int指针。正如我预期的那样工作正常,但是当我使用指针写入数组时,当我打印回c数组时,数据交换了MSBLSB。为什么会这样?这是操作系统相关的事情吗?#include"stdio.h"constintSIZE=12;int_tmain(intargc,_TCHAR*argv[]){unsignedcharc[SIZE]={1,2,3,4,5,6,7,8,9,10,11,12};unsignedint*ptr=(unsignedint*)c;inti;printf("Intsize=%d\n",sizeof(unsignedlong));f

c++ - T::iterator 出错,其中模板参数 T 可能是 vector<int> 或 list<int>

我正在尝试编写一个函数来打印常见STL容器(vector、列表等)的表示。我给了函数一个模板参数T,例如,它可能代表vector。我在获取T类型的迭代器时遇到问题。vectorv(10,0);repr>(v);...templatevoidrepr(constT&v){cout...brett@brett-laptop:~/Desktop/stl$g++-Wallmain.cppmain.cpp:Infunction‘voidrepr(constT&)’:main.cpp:13:error:expected‘;’before‘i’main.cpp:14:error:‘i’wasnotd

c++ - 如何将 ASCII char 转换为其 ASCII int 值?

我想将一个字符转换成它的ASCII整数值。我可以用所有可能的值填充一个数组并与之比较,但我觉得这不对。我想要类似的东西charmychar="k"publicintASCItranslate(charc)returncASCItranslate(k)//>>Shouldreturn107asthatistheASCIIvalueof'k'.重点是atoi()在这里不起作用,因为它仅用于可读数字。它不会处理空格(ASCII32)。 最佳答案 只需这样做:int(k)这里只是将char直接转换为int,不需要函数调用。

c++ - 从 char* 缓冲区读取 int32_t 的惯用 cpp14 方法是什么?

给定一个包含int(小端)的字符缓冲区c。如何读作int32_t?我写了这段代码,但感觉不符合cpp的习惯。int32_tv;char*p=(char*)&v;for(inti=0;i 最佳答案 将binary数据从char*缓冲区复制到任何其他数据类型的唯一可移植方法是使用memcpy(或等效字节-copyingmerhodsuchasstd::copy或你自己的模仿这种行为的方法)。memcpy(&my_number,my_buffer,sizeof(my_number));当然,缓冲区应该包含给定数据类型的正确位。如果它源于在

c++ - 从列表中删除重复项<int>

(尽可能多地)使用STL算法,例如remove_if()和list::erase,是否有一种很好的方法可以从定义如下的列表中删除重复项:listl;请注意list::unique()只有在连续元素中发生重复时才有效。就我而言,无论重复项在列表中的位置如何,都必须删除所有重复项。此外,删除重复意味着在最终结果中只保留每个元素的一个拷贝。编辑:l.sort()的选项其次是l.unique()不能使用,因为这会破坏列表的顺序。 最佳答案 使用list::remove_if成员函数、临时哈希集和lambda表达式。std::listl;st