标签: pointers

你如何传递成员函数指针?

我试图将类中的成员函数传递给一个带有成员函数类指针的函数.我遇到的问题是我不确定如何使用this指针在类中正确执行此操作.有没有人有建议?

这是传递成员函数的类的副本:

class testMenu : public MenuScreen{
public:

bool draw;

MenuButton<testMenu> x;

testMenu():MenuScreen("testMenu"){
    x.SetButton(100,100,TEXT("buttonNormal.png"),TEXT("buttonHover.png"),TEXT("buttonPressed.png"),100,40,&this->test2);

    draw = false;
}

void test2(){
    draw = true;
}
};
Run Code Online (Sandbox Code Playgroud)

函数x.SetButton(...)包含在另一个类中,其中"object"是模板.

void SetButton(int xPos, int yPos, LPCWSTR normalFilePath, LPCWSTR hoverFilePath, LPCWSTR pressedFilePath, int Width, int Height, void (object::*ButtonFunc)()) {

    BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height);

    this->ButtonFunc = &ButtonFunc;
}
Run Code Online (Sandbox Code Playgroud)

如果有人对如何正确发送此功能有任何建议,以便我以后可以使用它.

c++ pointers class function member

27
推荐指数
4
解决办法
4万
查看次数

何时使用指针而何时不使用?

我习惯于做Java编程,在编程时你永远不必考虑指针.但是,目前我正在用C++编写程序.在创建具有其他类成员的类时,何时应该使用指针,何时不应该使用指针?例如,我什么时候想要这样做:

class Foo {
    Bar b;
}
Run Code Online (Sandbox Code Playgroud)

与此相反:

class Foo {
    Bar* b;
}
Run Code Online (Sandbox Code Playgroud)

c++ java pointers

27
推荐指数
2
解决办法
7482
查看次数

为什么我们有指针而不是void

我知道,我们有不同的指针一样int,floatchar.一个void指针是可以容纳所有其他的唯一指针.

其他指针是否存在只是为了灵活地进行指针运算?

除了voidC语言之外的其他指针还有其他原因吗?

c pointers

27
推荐指数
3
解决办法
2668
查看次数

C++:对象的向量与指向新对象的指针的向量?

我正在寻求通过编写示例软件渲染器来提高我的C++技能.它采用由3d空间中的点组成的对象,并将它们映射到2d视口,并为视图中的每个点绘制不同大小的圆.哪个更好:

class World{
    vector<ObjectBaseClass> object_list;
public:
    void generate(){
        object_list.clear();
        object_list.push_back(DerivedClass1());
        object_list.push_back(DerivedClass2());
Run Code Online (Sandbox Code Playgroud)

要么...

class World{
    vector<ObjectBaseClass*> object_list;
public:
    void generate(){
        object_list.clear();
        object_list.push_back(new DerivedClass1());
        object_list.push_back(new DerivedClass2());
Run Code Online (Sandbox Code Playgroud)

?? 在第二个例子中使用指针来创建新对象会破坏使用向量的点,因为向量会在第一个示例中自动调用DerivedClass析构函数而不是在第二个示例中调用DerivedClass析构函数吗?在使用向量时是否需要指向新对象的指针,因为只要您使用其访问方法,它们本身就会处理内存管理?现在让我们说我在世界上有另一种方法:

void drawfrom(Viewport& view){
    for (unsigned int i=0;i<object_list.size();++i){
        object_list.at(i).draw(view);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用时,这将为世界列表中的每个对象运行draw方法.假设我希望派生类能够拥有自己的draw()版本.为了使用方法选择器( - >),列表是否需要指针?

c++ pointers vector

27
推荐指数
3
解决办法
4万
查看次数

0xDEADBEEF与NULL

在各种代码中,我已经看到调试版本中的内存分配NULL...

memset(ptr,NULL,size);
Run Code Online (Sandbox Code Playgroud)

或者0xDEADBEEF......

memset(ptr,0xDEADBEEF,size);
Run Code Online (Sandbox Code Playgroud)
  1. 使用每一个有什么好处,在C/C++中实现这一目标的首选方法是什么?
  2. 如果为指针指定了值0xDEADBEEF,是否仍然不符合有效数据?

c c++ null pointers

27
推荐指数
4
解决办法
1万
查看次数

标量初始值设定项的多余元素,用于指向int数组的指针

我正在研究K&R(例如5-9),我试图转换原始程序的2D数组

static char daytab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
Run Code Online (Sandbox Code Playgroud)

使用指针指向13个整数的数组

static char (*daytab)[13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
Run Code Online (Sandbox Code Playgroud)

但编译器会打印警告:标量初始化程序中的多余元素.

谷歌搜索没有帮助,甚至K&R在将数组传递给函数时写道,

myFunction(int daytab[2][13]) {...}
Run Code Online (Sandbox Code Playgroud)

是相同的

myFunction(int (*daytab)[13]) {...}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

27
推荐指数
2
解决办法
6万
查看次数

C将int数组指针作为参数传递给函数

我想将B int数组指针传递给func函数,并能够从那里更改它,然后查看main函数中的更改

#include <stdio.h>

int func(int *B[10]){

}

int main(void){

    int *B[10];

    func(&B);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一些错误:

In function 'main':|
warning: passing argument 1 of 'func' from incompatible pointer type [enabled by default]|
note: expected 'int **' but argument is of type 'int * (*)[10]'|
Run Code Online (Sandbox Code Playgroud)

编辑:新代码:

#include <stdio.h>

int func(int *B){
    *B[0] = 5;
}

int main(void){

    int B[10] = {NULL};
    printf("b[0] = %d\n\n", B[0]);
    func(B);
    printf("b[0] = %d\n\n", B[0]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我得到这些错误:

||In function 'func':|
|4|error: invalid type …
Run Code Online (Sandbox Code Playgroud)

c arrays parameters pointers function

27
推荐指数
3
解决办法
15万
查看次数

指针作为C中的函数参数

如果我有这个代码,例如:

int num = 5;
int *ptr = &num;
Run Code Online (Sandbox Code Playgroud)

以下两个功能有什么区别?

void func(int **foo);
void func(int *foo); 
Run Code Online (Sandbox Code Playgroud)

我在哪里调用函数:

func(&ptr); 
Run Code Online (Sandbox Code Playgroud)

我意识到前两者采用指针作为参数指针,而第二种只采用指针.

如果我传入func(&ptr),我实际上是在传入一个指针.指针指向另一个指针有什么区别?

我相信后者会给出一个不兼容的警告,但只要你知道你在做什么,似乎细节无关紧要.似乎可能为了可读性和理解,前者是更好的选择(2星指针),但从逻辑的角度来看,有什么区别?

c parameters pointers parameter-passing

27
推荐指数
3
解决办法
5万
查看次数

当解除引用运算符(*)过载时,*this的使用是否受到影响?

例如,

class Person{
        string name;
    public:
        T& operator*(){
            return name;
        }
        bool operator==(const Person &rhs){
            return this->name == rhs.name;
        }
        bool operator!=(const Person &rhs){
            return !(*this == rhs); // Will *this be the string name or the Person?
        }
}
Run Code Online (Sandbox Code Playgroud)

如果*this最终提领thisstring,而不是一个Person,是有维持的使用一种解决方法*作为类外引用操作?

如果我*不放弃而不放弃使用,那将是一个很大的障碍*this.

c++ pointers operator-overloading this dereference

27
推荐指数
2
解决办法
2054
查看次数

双指针有什么实际用途?

我搜索并搜索了一个答案,但找不到任何我真正"得到"的东西.

我对c ++非常陌生,无法理解使用双指针,三指针等等.他们有什么意义?

任何人都可以启发我

c++ pointers

27
推荐指数
6
解决办法
4809
查看次数