草庐IT

指针认证

全部标签

char 指针上的 C++ 错误

我想在结构中初始化一个char*字符串。这是结构:typedefstruct__String{char*data;//C-stringdata,unsigned*copyRef;//numberofcopyreference,deleteonlywhenthecopyRefis0boolisACopy;//thisbooleanistruewhen*dataisareftoanotherMyString__String(){data=0;isACopy=false;copyRef=newunsigned();*copyRef=0;return;}voidaddCopyRef(){*co

c++ - 我可以使用 operator== 作为指针吗?

我创建了一些重载了operator==的对象。classCorridor{public:Corridor(intiStart,intiEnd);~Corridor();//Overloadedoperatorstosimplifysearchincontainer.friendbooloperator==(constCorridor&lhs,constintrhs);friendbooloperator==(constintlhs,constCorridor&rhs);protected:intm_iIntersectionIDStart;intm_iIntersectionIDEnd

c++ - 通过引用传递动态变量的指针

我正在尝试创建动态变量并在new_test函数中通过引用传递其地址,但它不起作用。我做错了什么?代码:#includeusingnamespacestd;structtest{inta;intb;};voidnew_test(test*ptr,inta,intb){ptr=newtest;ptr->a=a;ptr->b=b;cout 最佳答案 代码不通过引用传递指针,因此对参数ptr的更改是函数本地的,对调用者不可见。更改为:voidnew_test(test*&ptr,inta,intb)//^

c++ - 将 std::shared_ptr 与指向成员函数的指针一起使用

使用C指针我可以做这样的事情:#include#includeclassFoo{voidbar(){std::coutfoo_sptr(&foo);void(Foo::*bar_ptr)()=&Foo::bar;(foo.*bar_ptr)();(foo_ptr->*bar_ptr)();//(foo_sptr->*bar_ptr)();//doesnotcompileforme如果我想使用smart_ptr而不是C指针,我会得到一个编译器错误:error:nooperator"->*"matchestheseoperandsoperandtypesare:std::shared_pt

c++ - c/c++关于指针的问题(双指针)

自从我学习c和c++类(class)以来,我对c指针很好奇(我打算在我的示例中使用new关键字,即使我知道malloc是C的方式)。我总是记得我的老师总是强制我们使用指针,她永远不会对数组进行赋值,她向我们证明,当您使用指针而不是使用数组时,汇编语言中需要的命令更少。我想继续这种良好做法,但我似乎很难使用指针,特别是双指针。假设我想在不使用c++字符串数据类型的情况下创建一个词库,并且我有一个char类型的双指针。intmain(){stringfileName="file.txt";char**wordBank=null;intwordCount=countWords(fileNam

c++ - 为什么不将字符串文字作为对数组的引用而不是不透明指针传递?

在C++中,字符串文字的类型是constchar[N],其中N,如std::size_t,是字符数加一(零字节终止符)。它们驻留在静态存储中,从程序初始化到终止都可用。通常,采用常量字符串的函数不需要std::basic_string接口(interface),或者更愿意避免动态分配;例如,他们可能只需要字符串本身及其长度。std::basic_string尤其必须提供一种从语言的native字符串文字构造的方法。这些函数提供了一个采用C风格字符串的变体:voidfunction_that_takes_a_constant_string(constchar*/*const*/s);//

c++ - 我总是可以用常规指针代替输入迭代器吗?

我能否始终以下面代码中示例的方式替换InputIterators的指针?inta[]={5,6,7,8,9,10};std::listl(a,a+4);//5,6,7,8list的构造函数声明是(省略分配器部分)list(InputIteratorfirst,InputIteratorlast);但是从C++引用来看,似乎任何支持++(递增)和*(取消引用)等操作的东西都可以用作InputIterators?谢谢。 最佳答案 C++标准部分§24.2.1[iterator.requirements.general]:Iterator

c++ - 资源管理- vector 和指针

我需要存储ThirdPartyElm类型的元素序列,我使用的是std::vector(或std::array如果我需要一个固定大小的序列)。我想知道我应该如何初始化序列。第一个版本创建一个新元素,并且(如果我是对的)在将元素插入到序列中时创建该元素的拷贝:for(inti=0;i第二个版本存储一系列指针(或更好的c++11智能指针):for(inti=0;ielm(newThirdPartyElm());//initelm..my_vector.push_back(std::move(elm));//my_array[i]=std::move(elm);}哪个是最轻量级的版本?请突出显

C++从成员指针转换回持有类指针

我有以下类(class):classSSVec{public:floatvalues[8];}我有一个对象SSVecobj,我将float*指针obj.values传递给另一个函数。在代码的其他地方,我得到了这个float*指针,然后将它转换回SSVec*指针。这在C++标准定义的行为方式中可能吗?大多数情况下,这将适用于静态转换,但我猜这实际上是未定义的行为。原因是float*指针传入和传出DLL,而DLL对SSVec一无所知。我保证传递的指针始终指向SSVec::value[8]对象成员。该类可能更复杂,但它不派生自任何东西,没有虚函数,并且只包含POD类型。values是第一个成

c++ - 指针,将 char ** 转换为 char *

我正在研究指针,但我被下面的示例程序难住了。它应该是将char**转换为char*,但我不明白程序背后的逻辑。程序在做什么?#includeusingnamespacestd;intmain(){char*notes[]={"cpp","python","java","mariadb"};void*base=notes;//notesandbase,holdstheaddressofnote'sfirstelementvoid*elemAddr=(char*)base+3*sizeof(char*);//ididn'tunderstandthisline???cout