以下声明有什么区别: int* arr1[8]; int (*arr2)[8]; int *(arr3[8]); 理解更复杂的声明的一般规则是什么?
在C ++中,是否有任何区别: struct Foo { … }; 和 typedef struct { … } Foo;
我有两种forms,一种是主要forms,另一种是选项forms。 所以说,例如,用户点击我的主窗体上的菜单: Tools -> Options ,这将导致我的选项窗体显示。 我的问题是如何从我的选项表单发回数据回到我的主窗体? 我知道我可以使用属性,但我有很多select,这似乎是一个单调乏味的事情。 那么最好的方法是什么?
考虑下面的代码: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f->bar(); // (a) f->baz(); // (b) } 我们期望(b)崩溃,因为空指针没有对应的成员x 。 在实践中, (a)不会因为this指针从未被使用而崩溃。 因为(b)取消引用this指针( (*this).x = 5; ),并且this为null,所以程序进入未定义的行为,因为dereferencing的null总是被认为是未定义的行为。 (a)是否会导致未定义的行为? […]
我知道操作系统有时会用某些模式(如0xCD和0xDD)初始化内存。 我想知道的是什么时候以及为什么发生这种情况。 什么时候 这是特定于编译器使用? 做malloc /新的和释放/删除相同的方式在这方面的工作? 它是特定于平台吗? 它会发生在其他操作系统,如Linux或VxWorks? 为什么 我的理解是,这只发生在Win32debuggingconfiguration中,它用于检测内存溢出并帮助编译器捕获exception。 你能举出一些实际的例子来说明这个初始化是有用的吗? 我记得读过一些东西(也许在Code Complete 2中),分配内存到一个已知的模式是很好的,某些模式会在Win32中触发中断,这将导致在debugging器中显示exception。 这是多么便携?
我查看了一些代码,并注意到惯例是转向types指针types SomeStruct* 成 typedef SomeStruct* pSomeStruct; 这有什么好处吗?
在C#中double[,]multidimensional arraydouble[,]和array-of-arrays double[][]什么区别? 如果有差异,每个人最好用什么?
在许多C ++ IDE和编译器中,当它为您生成主函数时,它看起来像这样: int main(int argc, char *argv[]) 当我编写没有IDE的C ++时,只需使用命令行编译器,我键入: int main() 没有任何参数。 这是什么意思,对我的程序至关重要?
为什么在C或C ++中,许多新的,甚至是老年的大学生的混乱的主要原因是什么? 是否有任何工具或思维过程帮助您了解指针在variables,函数和超越级别上的工作方式? 有什么好的做法可以把人带到“啊,我明白了”的水平,而不会让他们陷入整体概念? 基本上,钻出像情景。
在C / C ++中,全局variables和我的教授认为的一样糟糕吗?