在gcc 4.3上编译C ++时,我得到这个消息 error: 'NULL' was not declared in this scope 它出现和消失,我不知道为什么。 为什么? 谢谢。
我怎样才能将一个指针( Object *ob )传递给一个函数,该函数的原型是void foo(Object &) ?
我现在正在学习指针,而我的教授提供这段代码就是一个例子: //We cannot predict the behavior of this program! #include <iostream> using namespace std; int main() { char * s = "My String"; char s2[] = {'a', 'b', 'c', '\0'}; cout << s2 << endl; return 0; } 他在评论中写道,我们无法预测该计划的行为。 究竟是什么让它变得不可预测? 我没有看到任何错误。
我已经广泛地在Java中使用链表,但是我对C ++很陌生。 我正在使用这个在项目中给我的节点类 class Node { public: Node(int data); int m_data; Node *m_next; }; 但是我有一个问题没有得到很好的回答。 为什么有必要使用 Node *m_next; 指向列表中的下一个节点而不是 Node m_next; 我明白,使用指针版本更好; 我不会去争论事实,但是我不知道为什么更好。 关于指针如何更好地分配内存,我得到了一个不太明确的答案,我想知道这里有没有人能帮助我更好地理解。
我刚刚开始学习C语言,当做一个关于传递指针的指针作为函数参数的例子时,我发现了一个问题。 这是我的示例代码: #include <stdio.h> #include <string.h> #include <stdlib.h> int* allocateIntArray(int* ptr, int size){ if (ptr != NULL){ for (int i = 0; i < size; i++){ ptr[i] = i; } } return ptr; } void increasePointer(int** ptr){ if (ptr != NULL){ *ptr += 1; /* <—————————– This is line 16 */ } } int main() […]
我会开始说, 使用智能指针,你永远不必担心这一点。 下面的代码有什么问题? Foo * p = new Foo; // (use p) delete p; p = NULL; 这是由另一个问题的答复和评论引发的。 尼尔·巴特沃斯 ( Neil Butterworth)的一则评论引起了一些注意: 在C ++中将delete指针设置为NULL并不是通用的良好实践。 有时候这是一件好事,有时候是毫无意义的,可以隐藏错误。 有很多情况下,它不会帮助。 但根据我的经验,这不能伤害。 有人开导我。
我一直在阅读的一本C ++书籍指出,当使用delete操作符删除一个指针时,它所指向的位置上的内存被“释放”,并且可以被覆盖。 它还指出指针将继续指向相同的位置,直到它被重新分配或设置为NULL 。 但是在Visual Studio 2012中, 这似乎并不是这样! 例: #include <iostream> using namespace std; int main() { int* ptr = new int; cout << "ptr = " << ptr << endl; delete ptr; cout << "ptr = " << ptr << endl; system("pause"); return 0; } 当我编译和运行这个程序,我得到以下输出: ptr = 0050BC10 ptr = 00008123 Press any […]
我不是在讨论const指针的指针,而是指向const指针本身。 我正在学习C和C ++,超越了基本的东西,直到今天,我才意识到指针是按值传递给函数的,这是有道理的。 这意味着在一个函数内,我可以使复制的指针指向其他一些值,而不影响来自调用者的原始指针。 那么有一个函数头说什么点: void foo(int* const ptr); 在这样的函数内部,你不能使ptr指向其他的东西,因为它是const的,你不希望它被修改,但是像这样的函数: void foo(int* ptr); 工作也一样! 因为无论如何都会复制指针,即使修改副本,调用方中的指针也不受影响。 那么const的优点是什么?
我find了一个函数来计算一个数字的平方: int p(int n) { int a[n]; //works on C99 and above return (&a)[n] – a; } 它返回n 2的值。 问题是,它是如何做到的? 经过一些testing,我发现(&a)[k]和(&a)[k+1]是sizeof(a) / sizeof(int) 。 这是为什么?
if(pointer)或if(pointer != NULL) ,检查一个指针不是NULL是否安全?