标签: pointers

如果传递给函数,则确定数组的大小

如果将数组传递给另一个函数(未传递大小),是否可以确定数组的大小?该数组初始化为int array [] = {XXX} ..

我知道不可能做sizeof,因为它会返回指针的大小.我问的原因是因为我需要在传递数组的其他函数内运行for循环.我尝试过类似的东西:

for( int i = 0; array[i] != NULL; i++) {
........
}
Run Code Online (Sandbox Code Playgroud)

但我注意到在数组的近端,array [i]有时包含像758433这样的垃圾值,这不是数组初始化中指定的值.

c++ arrays null pointers

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

释放空指针

如果我们尝试释放指向NULL的指针,内存会发生什么?这有效吗?

为什么它不显示任何警告/错误消息?

c pointers

36
推荐指数
5
解决办法
1万
查看次数

C++从基类指针访问派生类成员

如果我分配一个类的对象Derived(具有基类Base),并将指向该对象的指针存储在指向基类的变量中,我该如何访问Derived该类的成员?

这是一个例子:

class Base
{
    public:
    int base_int;
};

class Derived : public Base
{
    public:
    int derived_int;
};

Base* basepointer = new Derived();
basepointer-> //Access derived_int here, is it possible? If so, then how?
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers derived-class

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

仅使用基类指针复制派生实体(没有详尽的测试!) - C++

鉴于由派生类的继承过多基类,这需要您通过基类指针,每个实体管理这些程序结构.当只知道基类指针时,是否有一种简单的方法来复制整个派生对象?

环顾四周似乎可能(如果非常繁琐)使用dynamic_cast调用来检查基类指针是否可以作为适当的派生类进行转换,然后使用派生类的复制构造函数复制它.然而,这并不是一个真正的最佳解决方案,部分原因是由于过度使用了dynamic_cast,而且它会让人感到头疼,难以维持和扩展.

我遇到的另一个更优雅的解决方案如下:

class Base
{
public:
   Base(const Base& other);
   virtual Base* getCopy();
   ...
}

class Derived :public Base
{
   Derived(const Derived& other);
   virtual Base* getCopy();
   ...
}

Base* Base::getCopy()
{
   return new Base(*this));
}

Base* Derived::getCopy()
{
   return static_cast<Base*>(new Derived(*this));
}
Run Code Online (Sandbox Code Playgroud)

然后通过调用getCopy()指向任何派生对象的Base类指针,仍然可以返回一个基类指针,但也复制了整个派生对象.这种方法感觉更易于维护,因为它只需要getCopy()在所有派生类中使用类似的函数,并且不需要针对所有可能的派生对象进行测试.

从本质上讲,这是明智的吗?或者有更好,更简洁的方式吗?

c++ inheritance pointers copy-constructor

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

对象的C++向量与指向对象的指针向量

我正在使用openFrameworks编写应用程序,但我的问题不仅仅是针对oF; 相反,它是关于C++向量的一般性问题.

我想创建一个包含另一个类的多个实例的类,但也提供了一个直观的界面来与这些对象进行交互.在内部,我的类使用了类的向量,但是当我尝试使用vector.at()操作对象时,程序将编译但不能正常工作(在我的情况下,它不会显示视频).

// instantiate object dynamically, do something, then append to vector
vector<ofVideoPlayer> videos;
ofVideoPlayer *video = new ofVideoPlayer;
video->loadMovie(filename);
videos.push_back(*video);

// access object in vector and do something; compiles but does not work properly
// without going into specific openFrameworks details, the problem was that the video would
// not draw to screen
videos.at(0)->draw();
Run Code Online (Sandbox Code Playgroud)

在某个地方,有人建议我制作一个指向该类对象的指针向量,而不是这些对象本身的向量.我实现了这一点,它确实像一个魅力.

vector<ofVideoPlayer*> videos;
ofVideoPlayer * video = new ofVideoPlayer;
video->loadMovie(filename);
videos.push_back(video);
// now dereference pointer to object and call draw
videos.at(0)->draw();
Run Code Online (Sandbox Code Playgroud)

我是动态地为对象分配内存,即 ofVideoPlayer = …

c++ pointers vector

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

如何在C中分配localtime的结果结构?

我正在使用time.hC中的文件来帮助我们处理时间/日期功能.

我碰到:

struct tm * _Cdecl localtime(const time_t *__timer);
Run Code Online (Sandbox Code Playgroud)

...似乎返回指向tm结构的指针.我发现按地址返回主要用于返回新的内存分配.

如果是这样,上面的返回实际上是如何工作的(a的返回地址struct tm).返回的对象是在某处定义的吗?

谢谢

c struct pointers function

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

使用函数更改指针包含的地址

如果我已经将指针声明pint *p; 主模块中,我可以改变所包含的地址p通过分配p=&a;其中a的另一个整数变量已经声明.我现在想用一个函数改变地址::

void change_adrs(int*q)
{
    int *newad;
    q=newad;
}
Run Code Online (Sandbox Code Playgroud)

如果我从主模块调用此函数

int main()
{
    int *p;
    int a=0;
    p=&a; // this changes the address contained by pointer p
    printf("\n The address is %u ",p);
    change_adrs(p);
    printf("\n the address is %u ",p); // but this doesn't change the address
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

地址内容不变.将功能用于同一任务有什么问题?

c pointers function

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

cpp/c ++获取指针值或depointerize指针

我想知道是否有可能使指针不是指针..

问题是我有一个函数接受一个参数的指针,让我轻松获取该指针的值.这是一个简单的int,所以我想知道我是否可以获得该值而无需在任何我希望值降落的地方发送指针.

我不希望函数将值作为int返回,因为它给2个指针赋值!

c++ pointers

36
推荐指数
1
解决办法
10万
查看次数

C#ref是C/C++中的指针还是C++中的引用?

我正在使用ref并且不明白"它是像C/C++中的指针还是像C++中的引用一样?"

为什么我问你这么弱的问题?因为,当我正在阅读C#/.NET书籍,msdn或与C#开发人员交谈时,我会因以下原因而感到困惑:

  • C#开发人员建议不要ref在函数的参数中使用,e.g. ...(ref Type someObject)对他们没有好处,他们建议...(Type someObject),我真的不明白这个建议.我听到的原因:更好地处理对象的副本,然后将其用作返回值,而不是通过引用等来破坏内存...通常我会听到有关数据库连接对象的这种解释.就像我简单的C/C++体验一样,我真的不明白为什么使用引用是C#中的坏东西?我控制对象的生命及其内存分配/重新分配等...我在书籍和论坛中只读了建议it's bad, because you can corrupt your connection and cause a memory leak by a reference lose,所以我控制对象的生命,我可以手动控制我真正想要的东西,那为什么它不好?
  • 现在阅读不同的书籍并与不同的人交谈,我不清楚是ref一个指针(*)或像C++中的引用&吗?我记得C/C++中的指针总是分配一个大小为void*4字节的空间(有效大小取决于体系结构),其中主机是结构或变量的地址.在C++中,通过传递引用&,没有来自堆/堆栈的新分配,并且您在内存空间中使用已定义的对象,并且外部没有像在纯C中那样的指针的子分配内存.那么refC#中的内容是什么?.NET VM是否像普通C/C++中的指针一样处理它,它为指针GC分配临时空间,还是像C++中的引用那样工作?是否ref只能正确使用托管类型或者类似于值类型bool, int,更好地切换unsafe代码并以非托管样式传递指针?

c# pointers memory-management reference ref

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

没有结构对象的C指针算术

我认为在C中是不可能的,但要求验证这一点.是否可以在没有这种类型的实变量的结构成员之间进行算术运算?例如:

typedef struct _s1
{
  int a;
  int b;
  int c;
} T1;
Run Code Online (Sandbox Code Playgroud)

我希望看到"c"成员与结构开始相比的偏移量.如果我有变量很容易:

T1 str;

int dist = (int)&str.c - (int)&str;
Run Code Online (Sandbox Code Playgroud)

但是我的结构太大了,它在RAM中没有成员(仅在EEPROM中).我想做一些地址计算,但不想定义RAM成员.我可以使用结构指针而不是结构变量(它只需要4个字节)来完成工作,但这个案例对我来说很有趣.

c c++ math pointers

36
推荐指数
6
解决办法
4270
查看次数