【发布时间】:2015-12-01 09:27:04
【问题描述】:
我正在学习 C++ 课程,所以我尝试了不同的方法来适应这些课程。这里我试图传递一个指向类函数的指针:
class Pointerss{
int size;
public:
Pointerss(int);
void f();
int *a;
};
Pointerss::Pointerss(int siz){
size = siz;
}
void Pointerss::f(){
cout<<"Size is:"<<size<<"\n";
for (int i=0; i<size; ++i) {
cout<<"a is:"<<a[i]<<"\n";
}
}
int main() {
int size = 5;
Pointerss dd (size);
Pointerss * p = new Pointerss(size);
p[0]=1; p[1]=2; p[2]=3; p[3]=4; p[4]=5;
p->a;
dd.f();
return 0;
}
所以“大小”由构造函数初始化,当调用“f()”时,打印正确的数字。但是当我将“p”分配给“a”(“p->a”)然后调用“f()”时,会打印一些随机数。我的电脑打印:
Size is:5
a is:0
a is:0
a is:1
a is:0
a is:1606416856
Program ended with exit code: 0
“a”和“size”有什么区别,我应该怎么做才能将指针传递给函数?
【问题讨论】:
-
我可以看到至少 3 个不同的问题。
-
这将被关闭和删除,但你需要阅读一个初学者C++ book,它教你什么是“p->a”(当然不是赋值)以及如何做变量初始化和赋值。
-
Pointerss* p = new Pointerss(size)分配单个元素,而不是数组。所以p[1]=2超出了访问范围,UB 也是。 -
这里也有很好的教程:cplusplus.com/doc/tutorial