标签: pointers

指针到"内部结构"成员是否被禁止?

我有一个嵌套的结构,我想有一个嵌入成员之一的指向成员的指针:

这合法吗?

struct InnerStruct
{
    bool c;
};
struct MyStruct {
    bool t;
    bool b;
    InnerStruct inner;
}; 
Run Code Online (Sandbox Code Playgroud)

这个:

MyStruct mystruct;
//...
bool MyStruct::* toto = &MyStruct::b;
Run Code Online (Sandbox Code Playgroud)

没问题,但是:

bool MyStruct::* toto = &MyStruct::inner.c;
Run Code Online (Sandbox Code Playgroud)

不是.任何的想法?

谢谢

这里有一些细节是的,它是&MyStruct :: b而不是mystruct :: b; 代码来自自定义RTTI/Property系统.对于每个指定的类,我们保留一个"Property"数组,包括一个Ptr-to-member它的用法如下:

//somewhere else in code...
( myBaseClassWithCustomRTTIPointer)->* toto = true;
Run Code Online (Sandbox Code Playgroud)

c++ pointers

18
推荐指数
3
解决办法
4073
查看次数

C编译器可以生成一个64位的可执行文件,其中指针是32位吗?

大多数程序都适用于<4GB的地址空间,但需要使用x64架构上提供的新功能.

是否有编译器/平台,我可以使用x64寄存器和特定指令,但保留32位指针以节省内存?

是否可以透明地对遗留代码执行此操作?切换到底是做什么的?

要么

代码有什么变化,在保持32位指针的同时获得64位功能是必要的?

c 64-bit pointers compilation

18
推荐指数
3
解决办法
1957
查看次数

_Block_Type_Is_Valid(pHead-> nBlockUse)错误

我一直在一个新项目工作,但我遇到一个问题,我不明白为什么失败.

当我执行此行时删除textY给我错误_Block_Type_Is_Valid(pHead-> nBlockUse).那么我做错了什么?

这是源代码:

Text.h

 #ifndef TEXT_H
 #define TEXT_H

typedef boost::shared_ptr<Font>  FontPtr;

class Text
{
public:

    Text(FontPtr font, char *text)
    {
        str = new char[35];
        this->font = font;    str = text; 
    }

    Text(const Text& cSource);
    Text& operator=(const Text& cSource);

    ~Text();
    .
    .
    .
    .

private:
    FontPtr font;
    char *str;
    GLuint texture;
    GLfloat pos_x, pos_y, width, height;
};

 #endif 
Run Code Online (Sandbox Code Playgroud)

Text.cpp

Text::Text(const Text& cSource)
{
    font = cSource.font;
    texture = cSource.texture;
    pos_x = cSource.pos_x;
    pos_y = cSource.pos_y;
    width = cSource.width;
    height = …
Run Code Online (Sandbox Code Playgroud)

c++ debugging pointers sdl visual-c++

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

将2D数组转换为指针指针

Activity solution[a][b];

...

Activity **mother = solution;
Run Code Online (Sandbox Code Playgroud)

我想将2D对象数组转换为指向指针的指针.我怎样才能做到这一点;

我在谷歌搜索它.但是我发现只有一个维数组的例子.

c++ static pointers

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

如何在不知道类型的情况下声明模板指针?

这就是我想做的事情:

ExampleTemplate* pointer_to_template;
cin >> number;
switch (number) {
case 1:
    pointer_to_template = new ExampleTemplate<int>();
    break;
case 2:
    pointer_to_template = new ExampleTemplate<double>();
    break;
}
pointer_to_template->doStuff();
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为在声明指针时必须指定模板类型.(ExampleTemplate* pointer_to_template应该是ExampleTemplate<int>* pointer_to_template.)不幸的是,我不知道模板的类型,直到它在switch块中声明.对于这种情况,最好的解决方法是什么?

c++ generics templates pointers

18
推荐指数
3
解决办法
1万
查看次数

使C#.NET中的IntPtr指向字符串值

我正在使用一个具有StringHandle字段的类,该字段IntPtr表示LPCWSTR在C++中的值 .

internal IntPtr StringHandle; // LPCWSTR
Run Code Online (Sandbox Code Playgroud)

现在说我有一个字符串: string x = "abcdefg"

如何使用String句柄指向String的开头,以便它像C++ LPCWSTR?

.net c# interop pointers

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

为什么boost可选参考不是T*的包装?

既然boost::optional<T&>已经是专业化了,为什么它不仅仅被实现为包装T*?这将允许它占用更少的空间,因为不需要m_initialized布尔值.

c++ memory boost pointers reference

18
推荐指数
2
解决办法
2725
查看次数

传递函数指针

关于如何将指针传递给指针函数,我有点困惑.我有一个函数,它指向一个我理解没有问题的函数(ExecBlock).但是我给了另一个函数原型(ExecBlock2),它接受了解引用指针(我不确定它到底是什么),如果传递函数有任何参数,也会接受参数.如果有人可以解释优先级以及解释引用函数的确切内容.这不仅仅是传递函数本身吗?在这种情况下(void*)做什么?

int ExecBlock (void (*f) (void), int isSet)
{
    return ExecBlock2( HOW TO PASS HERE? , NULL, isSet);
}

int ExecBlock2(void *(*f)(void *), void *arg, int isSet)
{
    ... more code
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c c++ pointers function parameter-passing

18
推荐指数
1
解决办法
7万
查看次数

便携式如何使用指针的低位作为标志?

如果有一个类需要一个指针和一个bool.为简单起见,int将在示例中使用指针,但指针类型无关紧要,只要它指向size()大于1的内容即可.

使用{ bool , int *}数据成员定义类将导致类的大小是指针大小的两倍,并浪费大量空间

如果指针未指向char(或其他数据size(1)),那么可能低位将始终为零.该课程可以定义为{int *}或方便:union { int *, uintptr_t }

bool通过设置/清除指针的低位按照逻辑实现的bool价值和清除该位,当你需要使用指针.

定义的方式:

struct myData
{
 int * ptr;
 bool flag;
};
myData x;

// initialize
x.ptr = new int;
x.flag = false;

// set flag true
x.flag = true;

// set flag false
x.flag = false;

// use ptr
*(x.ptr)=7;

// change ptr
x = y;                // y …
Run Code Online (Sandbox Code Playgroud)

c++ optimization portability pointers

18
推荐指数
1
解决办法
3426
查看次数

C指针和数组:[Warning]赋值使整数指针不带强制转换

我在使用C中的指针和数组时遇到了一些问题.这是代码:

#include<stdio.h>


int *ap;
int a[5]={41,42,43,44,45};
int x;

int main()
{
    ap = a[4];
    x = *ap;
    printf("%d",x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行代码时,我收到此警告:

[Warning]赋值使整数指针没有强制转换[默认启用]

对于第9行(ap = a [4];)并且终端崩溃.如果我将第9行更改为不包含位置(ap = a;),我不会收到任何警告并且它可以正常工作.为什么会这样?我觉得答案很明显,但我看不出来.

c arrays warnings pointers

18
推荐指数
2
解决办法
14万
查看次数