有没有人有指针算术的好文章或解释(博客,例子)? 图中的观众是一群学习C和C ++的Java程序员。
所以我在我的PC上安装了所谓的免费VS Community 2017,30天后,我收到了VS的这个消息,说我的许可证已经过期。 执照? 过期? 我认为社区版是“永远免费的”,因此体育“社区”标签。 这是怎么回事? 我试图用我的outlook.com帐户login,但它说“出了问题”,并返回到同一屏幕。 我如何获得VS 2017的完全免费版本,这样我可以在我的FOSS项目上工作?
我已经看到在OpenGL VBO实现中使用下面的macros: #define BUFFER_OFFSET(i) ((char *)NULL + (i)) //… glNormalPointer(GL_FLOAT, 32, BUFFER_OFFSET(x)); 你能否提供一些关于这个macros如何工作的细节? 它可以被replace为一个function? 更确切地说,增加一个NULL指针的结果是什么?
考虑下面的代码片段: int (*p)[3]; int (*q)[3]; q = p; q++; printf("%d, %d\n", q, p); printf("%d\n", qp); 我知道指针运算是智能的,这意味着操作q++提前q足够多的字节指向下一个3整数数组,所以我不惊讶第一个打印是12, 0 ',这意味着增加q在12日更大。 但是第二张照片确实给我带来了惊喜。 它打印1! 那么为什么要打印1而不是12呢? 它只是困惑我。
当一个指向特定types(比如int , char , float ,…)的指针递增时,它的值就会增加该数据types的大小。 如果一个指向大小为x数据的void指针递增,它如何指向前面的x个字节? 编译器如何知道将x添加到指针的值?
正如Joel在C语言编程语言 (又名:K&R)中的Stack Overflow podcast#34中指出的那样,C: a[5] == 5[a] 乔尔说,这是因为指针算术,但我仍然不明白。 为什么a[5] == 5[a] ?