C ++初学者问题:解雇与乘法[重复
-
29-09-2019 - |
题
这个问题在这里已经有一个答案:
只是进入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;”;