标签: pointers

课程和指针,它们如何工作?

主要问题是创建动态类.我做了什么:

ptr = new animal[2];
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个大小为2的动态数组,由指针ptr指向.当我尝试这些操作时会出现问题:

ptr[0].setspeed(9);
ptr++->setspeed(13);
Run Code Online (Sandbox Code Playgroud)

我正在使用DDD(gdb图形)调试器,当我显示ptr时,我只看到它指向一个对象.当我尝试设置速度时,第一个似乎工作,但第二个不会(速度默认为0).打印只会变成垃圾.

我不太确定发生了什么,请帮忙.

当我这样做时:

ptr->print();
Run Code Online (Sandbox Code Playgroud)

难道这就是打印两个ptr[0]ptr[1],或者只是ptr[0]

此外,有人可以快速绘制出ptr动态类和新动态类的图片吗?我看到它的方式,它是一个指向数组的ptr,数组大小为2,每个都有一个动物对象.

#include <iostream>
using namespace std;

class animal
{
    private:
        int speed;
        double position_x;
        double position_y;

   public:
        animal() : speed(0), position_x(0), position_y(0)
        {
        }

        animal (int v, double x, double y)
        {
            this->speed = v;
            this->position_x = x;    
            this->position_y = y;
        }

        animal(const animal & g)
        {
            this->speed = g.speed;
            this->position_x = g.position_x;  
            this->position_y = g.position_y;
        }

        ~animal();

        void …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

0
推荐指数
3
解决办法
183
查看次数

函数不允许比较String - C++中的单个字符

我有一个叫做的新功能removeInelligibleCharsFromTargetName.

void removeInelligibleCharsFromTargetName(string *targetName)
{
    for(int i = 0; i < targetName->length(); i++)
    {
        for(int j = 0; j < ineligibleChars.length(); j++)
        {
            if(targetName[i] == ineligibleChars[j])
                targetName[i] = '_';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我在if循环中尝试比较时,我得到以下错误:

错误C2678:binary'==':找不到运算符,它接受类型为'std :: string'的左手操作数(或者没有可接受的转换)32> c:\ program files\microsoft sdks\windows\v6. 0a\include\guiddef.h(192):尝试匹配参数列表'(std :: string,char)时可能是'int operator ==(const GUID&,const GUID&)'

但是把那个完全相同的嵌套循环放回到我调用的地方而不是调用它可以正常工作的函数.

有人可以告诉我,它不会在函数中工作但在函数外工作正常.毫无疑问,这是一个指针,但我不知道是什么.

c++ pointers

0
推荐指数
1
解决办法
87
查看次数

t*指向什么价值

我正在研究指针,我想出了类似的代码

class b 
{

}
class d

{

}

d* a = 0;

b *t = new b();

*t = * ( b* )a;
Run Code Online (Sandbox Code Playgroud)

这个声明是什么意思?
什么价值?

c++ pointers

0
推荐指数
1
解决办法
93
查看次数

C中的数组指针有问题

我正在解决去年的GATE问题论文,我坚持这个问题

以下C程序片段打印什么?

char c[]="GATE2011";
char *p =c;
printf ("%s", p+p[3]-p[1]);
Run Code Online (Sandbox Code Playgroud)

答案是'2011'

我知道在c中,数组变量是指向数组第一个地址的指针.我的逻辑答案是"E2011",但输出是2011年

有人可以解释这涉及的指针数学吗?

c arrays pointers

0
推荐指数
1
解决办法
129
查看次数

C - 访问stuct数组

我有一个基本的问题,我不能为我的生活弄清楚.新来的C所以请耐心等待.

首先,我创建一个结构数组:

struct rule {
    int  *in;       /* ingress flag */
    int  *out;      /* egress flag */
    char *actionvalue;  /* actionvalue BLOCK or UNBLOCK */  
    char *proto;        /* protocol e.g. UDP TCP ICMP */    
    char *ip_src;       /* source and dest address */
    int  *srcport;      /* src port */
    char *net_src;      /* source and dest netmask */   
    char *ip_dst;       /* source and dest address */   
    int  *dstport;      /* dst port */
    char *net_dst;      /* source and dest netmask */   
} rulelist[10]; …
Run Code Online (Sandbox Code Playgroud)

c arrays struct pointers

0
推荐指数
1
解决办法
118
查看次数

使用malloc分配内存并找到strlen()

int main(){
    char *ptr = (char*)malloc(10);
    printf("%d",strlen(ptr));
}
Run Code Online (Sandbox Code Playgroud)

输出是11.我不知道为什么会这样?

c malloc pointers strlen

0
推荐指数
1
解决办法
423
查看次数

c ++使用const char*参数类型调用函数的最佳方法

使用以下声明调用函数的最佳方法是什么?

string Extract(const char* pattern,const char* input);
Run Code Online (Sandbox Code Playgroud)

我用

string str=Extract("something","input text");
Run Code Online (Sandbox Code Playgroud)

这个用法有问题吗?

我应该使用以下内容吗?

char pattern[]="something";
char input[]="input";
//or use pointers with new operator and copy then free?
Run Code Online (Sandbox Code Playgroud)

两者都有效,但我喜欢第一个,但我想知道最佳实践.

c++ pointers function char parameter-passing

0
推荐指数
1
解决办法
5256
查看次数

功能和投射警告的冲突类型?

我确信对于有c指针经验的人来说,这是一个简单的答案,但我现在正在努力查看我的错误.我收到一个警告,即函数的返回调用会产生一个来自整数的指针,即使该函数的返回类型是指针.并获得函数具有冲突类型的错误.这是代码,我删除了函数的主体,我仍然得到错误和警告.

long long *merge_sort(long long * arr, int size){
// Arrays shorter than 1 are already sorted
if(size > 1){
    int middle = size / 2, i; 
    long long *left, *right;
    left = arr;
    right = arr + middle; 

    left = merge_sort(left, middle);
    right = merge_sort(right, size-middle);
    return merge(left,right);
}else { return arr;  }
}

long long *merge(long long * left, long long * right){

}
Run Code Online (Sandbox Code Playgroud)

c pointers

0
推荐指数
1
解决办法
1266
查看次数

int someInts [3]和int*someInts = new int [3]之间的区别?

使用int someInts[3]和使用声明一个新的整数数组有什么区别int* someInts = new int[3]

c++ arrays pointers declaration

0
推荐指数
1
解决办法
977
查看次数

如何处理大型指针结构

我编写的应用程序通过外部服务将数据推送到某个服务器.我必须使用一个定义的结构,它看起来像这样:

class A {
    B *b; // Another class built the same principle
    C *c; // And another one
    ...
};
Run Code Online (Sandbox Code Playgroud)

它在某处归结为

class XY {
    double *some_val;
    std::string *another_val;
    ...
};
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,如果你愿意,我只处理指针指针,我还没有想出处理这些结构的最佳方法.

我自己可以用new和处理内存管理delete,但是之后我不得不做大量的清理工作,而且我忘记清理一些东西,而我的程序漏洞在我看来太高了.

我可以在本地声明这些类并以这种方式填充它们,但是我必须事先声明每个变量,所以我必须在我可以做任何事情之前分析类层次结构,之后它仍然会变得非常混乱.

智能指针也出现在我脑海中,但由于它们基本上是一个包装指针的类,我必须事先声明它们,相比之前方法的优势似乎很小.

有没有人知道一个聪明的,最重要的是,可读/可维护的方法来处理这些庞大的指针结构?

更新:

如果有人遇到同样的问题,这是我现在的方法(虽然我仍然觉得它很乱!):

#include <boost/shared_ptr.hpp>
#include <boost/any.hpp>

class A {
    B *b_;
    double *d_;
};

int main() {
    std::vector<boost::any> vp;

    // Create instance of A
    vp.push_back(boost::shared_ptr<A>(new A));
    A *a = boost::any_cast<boost::shared_ptr<A> >(vp.back()).get();

    // Create instance of B in A
    vp.push_back(boost::shared_ptr<B>(new B)); …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-management

0
推荐指数
1
解决办法
158
查看次数