给定一个非连续的STL容器(您也可以考虑boost::unordered_map并boost::multi_index_container考虑),如果没有删除任何元素,是否保证容器内元素的内存地址永远不会改变(但是可以添加新的容器)?
例如
class ABC { };
//
//...
//
std::list<ABC> abclist;
ABC abc;
abclist.insert(abc);
ABC * abc_ptr = &(*abclist.begin());
Run Code Online (Sandbox Code Playgroud)
在其他的字将abc_ptr被指出abc在整个执行,如果我不删除abc的abc_list.
我问这个是因为我要用ABCC++/Cli ABC包装类,所以我需要指向包装类中的实例的指针.ABC是一个简单的类,我希望容器处理内存.如果答案是否定的话我将使用std::list<ABC*>.
我有这个代码:
char* hello = "Hello World";
std::cout << "Pointer value = " << hello << std::endl;
std::cout << "Pointer address = " << &hello << std::endl;
Run Code Online (Sandbox Code Playgroud)
这是结果:
Pointer value = Hello World
Pointer address = 0012FF74
Run Code Online (Sandbox Code Playgroud)
当我使用OllyDbg调试我的程序时,我看到0x0012FF74的值是例如0x00412374.
有什么方法可以打印hello指向的实际地址吗?
我将指向结构的指针传递给函数时遇到了问题.我的代码基本上如下所示.在main函数中调用modify_item后,stuff == NULL.我想要东西是一个指向项目结构的指针,元素等于5.我做错了什么?
void modify_item(struct item *s){
struct item *retVal = malloc(sizeof(struct item));
retVal->element = 5;
s = retVal;
}
int main(){
struct item *stuff = NULL;
modify_item(stuff); //After this call, stuff == NULL, why?
}
Run Code Online (Sandbox Code Playgroud) 我有以下功能:
func addCatsToMap(m map[string][]CatHouse, meowId int, treats Set, dog *Dog) {
//if (complicated thing) add Cat to m
}
Run Code Online (Sandbox Code Playgroud)
其中Set,type的类型treats是具有以下定义的接口:
type Set interface {
Add(value string)
Contains(value string) (bool)
Length() (int)
RemoveDuplicates()
}
Run Code Online (Sandbox Code Playgroud)
题:
这是真的m,treats和dog是通过按引用,并且meowId有它的价值被复制?
我认为:
m 是传递参考,因为它是一张地图dog是一个结构.所以,我应该传递指针以避免复制数据假设在我的平台上sizeof(int)==sizeof(void*),我有这个代码:
printf( "%p", rand() );
Run Code Online (Sandbox Code Playgroud)
这是不确定的行为,因为传递一个不是有效指针的值代替%p?
假设我想在a中存储一组函数指针List<(*func)>,然后稍后调用它们,甚至可能使用参数...就像我存储在a中一样,我Dict<(*func), object[] params>可以用参数调用func吗?我该怎么做?
int numbers[20];
int * p;
Run Code Online (Sandbox Code Playgroud)
这两项任务是否相同?
p = numbers;
p = &numbers[0];
Run Code Online (Sandbox Code Playgroud) 我有一个关于c ++ 11指针的问题.具体来说,如何将基类的唯一指针转换为派生类?
class Base
{
public:
int foo;
}
class Derived : public Base
{
public:
int bar;
}
...
std::unique_ptr<Base> basePointer(new Derived);
// now, how do I access the bar member?
Run Code Online (Sandbox Code Playgroud)
它应该是可能的,但我无法弄清楚如何.每次我尝试使用
basePointer.get()
Run Code Online (Sandbox Code Playgroud)
我最终得到了可执行文件崩溃.
在此先感谢,任何建议将不胜感激.
例如,如果我有一个结构FooSpec:
struct FooSpec { /* lots of data */ };
Run Code Online (Sandbox Code Playgroud)
将以下两个都作为重载函数提供是不好的做法吗?或者我应该选择一个并坚持下去?
Foo *createFoo(const FooSpec *spec) { /* ... */ }
Foo *createFoo(const FooSpec &spec) { return createFoo(&spec); }
Run Code Online (Sandbox Code Playgroud)
两者都会导致意想不到的问题?