这个问题在这里已经有一个答案:

只是进入C ++。当我看到乘数的符号时,我会不断地从轨道上抛弃(*)用来表示变量的解释

例如:unsigned char * pixels = vidgrabber.getPixels();

这会把其他人丢掉吗?让我围绕这个问题有什么技巧?

谢谢你。


ps我还有另一个相当简单的问题,没有回答:(在这里: 初学者问题:添加/减去价值,而不仅仅是该值 请漂亮!感谢您的宝贵时间!

有帮助吗?

解决方案

C和继承C ++被操作员淹没,并且本质上对上下文敏感。您将必须习惯它:

如果 * 出现 在声明的变量名称之前 (或定义),这是 类型修饰符 并使该变量成为指针。
如果是 Unary前缀操作员 对于一个表达式的变量,它是 提出 (或任何被超载到的)。
如果是 二进制元素操作员 对于表达式的两个变量,它是 乘法 (或任何被超载到的)。

(由此您可以看到 * 在你的 unsigned char * pixel 不是指定一元前缀,而是 类型修饰符.)

注意 & 几乎很像 *, ,只有含义是不同的:它使变量A 参考, ,是操作员或二进制的地址。

其他提示

编写自己的代码时的一个建议是“拥抱” *用作指针/deref:

unsigned char *pixels = ...

if (*pixels == ...)

并在使用用作乘数时宽图:

int y = x * 7;

您还可以使用其他线索(例如指针Deref是一个单一操作员,而多个是二进制运算符)。

答案是:练习。每种新的编程语言在某种程度上看起来都会很有趣,有些比其他编程语言更有趣。学会使用它,它将变得自然。

您可以通过以下事实区分乘法操作员与乘法操作员,通常,乘法符操作员在其左侧没有类型名称。

人为的例子

你写的 c。您能从仅查看它来分辨结果吗? ==>

int v[] = {5,6}, w[] = {7,8};
int m[][2] = { {1,2}, {3,4} };

int result = * v * * * m * * w;

问候

RBO

说英语的人围绕这样一个事实,即相同的单词可以根据上下文具有不同的含义。一旦您沉浸在上下文中,通常很明显操作员正在做什么。

与其他语言相比,要注意C的重要一件事是,当在一个语句中合并多个声明时,星号适用于单个项目,而不是整个集合。例如:

int* foo,bar;

创建一个称为Foo的int-pointer,并创建一个名为bar的int。我总是将星号钉在变量上,并且我避免在一个陈述中混合指针和非计算机:

int *foo;
int *ptr1,*ptr2,*ptr3;
int bar,boz,baz;

同样重要的是要注意,诸如“ const”和“ domatile”之类的存储级预选赛可能并不总是像人们期望的那样绑定。该声明

volatile int *foo;
并不意味着“ foo”是一个挥发性的,而是“ foo”指出的是一个动荡的。如果foo本身是“挥发性”的东西,则必须写“ int * volatile foo;”;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top