我目前正在通过阅读一本名为"21天自学C"的好初学者的书来学习C(我已经学习了Java和C#,所以我的动作速度要快得多).我正在阅读有关指针的章节,而 - >(箭头)操作符出现时没有解释.我认为它用于调用成员和函数(比如.(点)运算符,但是用于指针而不是成员).但我不完全确定.我可以获得解释和代码示例吗?
我创建了一个名为Kwadrat的类,里面有三个int字段.代码块给我意见,我可以进入由对象的字段::,.以及->.箭头是唯一有效的箭头,但为什么呢?这三者有什么区别?
#include <iostream>
using namespace std;
class Kwadrat{
public:
int val1, val2, val3;
Kwadrat(int val1, int val2, int val3)
{
this->val1 = val1;
//this.val2 = val2;
//this::val3 = val3;
}
};
int main()
{
Kwadrat* kwadrat = new Kwadrat(1,2,3);
cout<<kwadrat->val1<<endl;
cout<<kwadrat->val2<<endl;
cout<<kwadrat->val3<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习Qt教程,而且我也是初学者级的C++.在Qt教程中,有一个使用statement来设置按钮文本的示例:
ui->pushButton->setText("Hello");
Run Code Online (Sandbox Code Playgroud)
我知道我们可以使用->operator来允许指针访问类的成员.在这种情况下,pushButton->setText("Hello")但我只是不明白其含义ui->pushButton,我搜索了一些解答说明了ui持有的参考资料pushButton,但是如何做到这一点呢?pushButton是指向对象的指针,不是类的成员,我们可以使用->将对象地址放到ui指针中吗?
抱歉我的英语不好,我可能会困惑你.我希望有人能提前给我一个明确的解释.
可能重复:
C++:ptr-> hello();/*VERSUS*/(*ptr).hello();
为什么C区分 - >和.?
我知道成员运算符(.)和指针运算符( - >)之间的区别.
为什么C设计人员为此访问创建了不同的运算符?为什么编译器不能自己搞清楚?
如果你总是使用一个.是否存在模糊的情况,无论你是指成员还是指针成员?
编辑:我不是在寻找"(*a).b"语法.我问为什么设计师不允许你用"ab"代替"a-> b"?
可能重复:C中的
箭头运算符( - >)用法
我想弄清楚"."之间的区别.和" - >"C语言中的数据访问风格.例如.
struct div{
int quo;
int rem;
};
Run Code Online (Sandbox Code Playgroud)
1)使用" - >"
struct div *d = malloc(sizeof(struct div));
d->quo = 8/3;
d->rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d->quo,d->rem);
Run Code Online (Sandbox Code Playgroud)
2)使用"."
struct div d;
d.quo = 8/3;
d.rem = 8%3;
printf("Answer:\n\t Quotient = %d\n\t Remainder = %d\n-----------\n",d.quo,d.rem);
Run Code Online (Sandbox Code Playgroud)
我得到两个案件的相同输出.
答案:商数= 2剩余= 2
这两种方法如何在内部运作?什么时候应该使用哪一个?我尝试在互联网上搜索但没有多大帮助.任何相关链接也表示赞赏.
他们在内存中的存储也有什么区别吗?
在这本书中,我有我学习指针和我刚刚得到有关OOP的章节进行(吐在地面上)反正它告诉我,我可以用一个成员选择操作这样的( - >).它说这就像"." 除了指向对象而不是成员对象.什么是差异,它看起来像是以同样的方式使用...
我读过它并且我大部分都明白它,但是这种情况让我有点困惑。我们为什么不使用鼠标操作->的scanf?我知道点用于对象,箭头用于指针,但在这里,g是指向结构的指针。
DOCUMENT *take(int *pn){
DOCUMENT *g;
printf("How much documents? ");
scanf("%d", pn);
g = (DOCUMENT *)calloc(*pn, sizeof(DOCUMENT));
for (int i = 0; i < *pn; i++)
{
printf("Type in author, name of document and number of pages: ");
scanf("%s %s %d", g[i].author, g[i].name, &g[i].s );
}
return g;
}
Run Code Online (Sandbox Code Playgroud) 假设我有以下变量:
MyObject* obj = ...;
Run Code Online (Sandbox Code Playgroud)
如果此对象具有字段foo,则有两种访问方式:
obj->foo(*obj).foo使用一种方法与另一种方法之间是否有任何区别。或者第一种方法只是第二种方法的语法糖?
我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。