我最近很高兴向C编程初学者解释指针并偶然发现了以下困难.如果你已经知道如何使用指针,它可能看起来似乎不是一个问题,但尝试以清醒的头脑看下面的例子:
int foo = 1;
int *bar = &foo;
printf("%p\n", (void *)&foo);
printf("%i\n", *bar);
Run Code Online (Sandbox Code Playgroud)
对于绝对的初学者来说,输出可能会令人惊讶.在第2行他/她刚刚宣布*bar为&foo,但在第4行结果显示*bar实际上是foo而不是&foo!
您可能会说,混淆源于*符号的模糊性:在第2行中,它用于声明指针.在第4行中,它用作一元运算符,它获取指针指向的值.两件不同的事,对吗?
然而,这种"解释"根本不能帮助初学者.它通过指出一个微妙的差异引入了一个新的概念.这不是教授它的正确方法.
那么,Kernighan和Ritchie是如何解释的呢?
一元运算符*是间接或解除引用运算符; 当应用于指针时,它访问指针指向的对象.[...]
指针ip的声明
int *ip用作助记符; 它说表达式*ip是一个int.变量声明的语法模仿可能出现变量的表达式的语法.
int *ip应该读作" *ip会回来int"吗?但是为什么声明后的作业不遵循这种模式?如果初学者想要初始化变量怎么办?int *ip = 1(阅读:*ip将返回a int和intis 1)将无法按预期工作.概念模型似乎并不一致.我在这里错过了什么吗?
编辑:它试图在这里总结答案.
我正在使用THREE.WebGLRenderer,我想在3D空间的特定位置绘制一些相同大小的白点.
我应该使用精灵,计算2D屏幕坐标并使用SpriteMaterial.useScreenCoordinate?
我应该使用它们与相机的距离来重新计算精灵的大小吗?
我可以使用SpriteMaterial.scaleByViewport或SpriteMaterial.sizeAttenuation吗?有没有这方面的文件?
有像GL_POINTS这样的东西吗?仅定义1个顶点并在该位置获得彩色像素会很不错.我应该尝试使用PointCloud吗?
谢谢你的任何提示!
编辑:所有点在屏幕上应具有相同的大小.