Tag: 指针

通过非const指针修改一个const

我有点困惑以下代码发生了什么事情: const int e = 2; int* w = ( int* ) &e; // (1) cast to remove const-ness *w = 5; // (2) cout << *w << endl; // (3) outputs 5 cout << e << endl; // (4) outputs 2 cout << "w = " << w << endl; // (5) w points […]

为什么我可以通过指针转换来改变一个局部的constvariables,而不是C中的全局variables呢?

我想通过使用指针来改变一个常量的值。 考虑下面的代码 int main() { const int const_val = 10; int *ptr_to_const = &const_val; printf("Value of constant is %d",const_val); *ptr_to_const = 20; printf("Value of constant is %d",const_val); return 0; } 如预期的那样,常量的值被修改。 但是当我用全局常量尝试相同的代码时,出现以下运行时错误。 Windows崩溃记者正在开放。 在这个语句中打印第一个printf语句之后,可执行程序正在停止“* ptr_to_const = 20;” 考虑下面的代码 const int const_val = 10; int main() { int *ptr_to_const = &const_val; printf("Value of constant is %d",const_val); […]

什么是C ++指针的默认构造函数?

我有这样的代码: class MapIndex { private: typedef std::map<std::string, MapIndex*> Container; Container mapM; public: void add(std::list<std::string>& values) { if (values.empty()) // sanity check return; std::string s(*(values.begin())); values.erase(values.begin()); if (values.empty()) return; MapIndex *mi = mapM[s]; // <- question about this line if (!mi) mi = new MapIndex(); mi->add(values); } } 我主要关心的是mapM [s]expression式是否将返回引用空指针,如果新项目添加到地图? SGI文档说: data_type&operator [](const key_type&k)返回与特定键相关联的对象的引用。 如果地图尚未包含这样的对象,则operator []将插入默认对象data_type()。 […]

双删除会发生什么?

Obj *op = new Obj; Obj *op2 = op; delete op; delete op2; // What happens here? 当你不小心加倍删除时,会发生什么情况? 有关系吗? 编译器会抛出一个错误吗?

指向特定的固定地址的指针

你如何给一个指针指定一个特定的内存地址? AVR m128等微控制器中的特殊function寄存器具有固定的地址,AVR GCC在io.h头文件中定义了SFR,但我想自己处理。

远指针和近指针有什么区别?

有人可以告诉我far指针和C指针之间的区别吗?

指针的大小是多less?

指针的大小与指向它的types的大小是一样的,还是指针总是有固定的大小? 例如… int x = 10; int * xPtr = &x; char y = 'a'; char * yPtr = &y; std::cout << sizeof(x) << "\n"; std::cout << sizeof(xPtr) << "\n"; std::cout << sizeof(y) << "\n"; std::cout << sizeof(yPtr) << "\n"; 这会是什么结果呢? 如果sizeof(xPtr)返回4, sizeof(yPtr)返回1,还是2个指针实际返回相同的大小? 我问这个的原因是因为这些指针正在存储一个内存地址而不是它们各自存储地址的值。

NULL vs nullptr(为什么被replace?)

我知道在C ++中0x或NULL被基于指针的应用程序中的nullptr所取代。 我只是好奇他们为什么做这个replace的确切原因? 在什么情况下使用nullptr比NULL nullptr利于处理指针?

为什么cudaMalloc()使用指针指针?

例如, cudaMalloc((void**)&device_array, num_bytes); 这个问题之前已经被问到了 ,答复是“因为cudaMalloc返回一个错误代码”,但我没有得到它 – 什么有一个双指针与返回错误代码? 为什么不能用简单的指针来完成这个工作? 如果我写 cudaError_t catch_status; catch_status = cudaMalloc((void**)&device_array, num_bytes); 错误代码将被放入catch_status ,并返回一个简单的指针分配的GPU内存应该就够了,不是吗?

解引用这个指针给我-46,但是我不知道为什么

这是我跑的一个程序: #include <stdio.h> int main() { int y = 1234; char *p = &y; int *j = &y; printf("%d " , *p); printf("%d" , *j); } 我对输出有些困惑。 我所看到的是: -46 1234 我作为一个实验写了这个程序,并不知道它会输出什么。 我期待y可能有一个字节。 这里发生了什么“幕后”? 如何解引用p给我-46? 更新 由于指出了其他我必须做明确铸造不会导致UB.I不改变这一行char *p = &y to char *p = (char *)&y以便我不在下面的答案无效。