Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我能';我不理解静态指针的用途_C++ - Fatal编程技术网

C++ 我能';我不理解静态指针的用途

C++ 我能';我不理解静态指针的用途,c++,C++,我创建了一个具有行星三个属性的结构。然后,我创建了一个函数,它创建了一个新的星球——它是一个更大应用程序的一部分,但它只是一个函数,将函数参数分配给一些结构变量,然后返回结构 这实际上是一段代码,我正试图更好地理解它。我试图掌握指针和动态内存的概念 #include <iostream> #include <string.h> using namespace std; typedef enum { NEPTUNE_LIKE, GAS_GIANT,

我创建了一个具有行星三个属性的结构。然后,我创建了一个函数,它创建了一个新的星球——它是一个更大应用程序的一部分,但它只是一个函数,将函数参数分配给一些结构变量,然后返回结构

这实际上是一段代码,我正试图更好地理解它。我试图掌握指针和动态内存的概念

#include <iostream>
#include <string.h>

using namespace std;


typedef enum {
    NEPTUNE_LIKE,
    GAS_GIANT,
    TERRESTRIAL,
    SUPER_EARTH,
    UNKNOWN
}PlanetType;

typedef struct {
    char name[30];
    PlanetType type;
    float distanceToEarth;
}Planet;

Planet createPlanet(char myname[], PlanetType mytype, double mydistance)
{
    Planet pl;
    strcpy_s(pl.name, myname);
    pl.type = mytype; 
    pl.distanceToEarth = mydistance;
    return pl;
}

char* getName(Planet* p)
{
    return p->name;
}

PlanetType getType(Planet* p)
{
    return p->type;
}

double getDistance(Planet* p)
{
    return p->distanceToEarth;
}

int main()
{
    char s[30] = "Nume";
    static Planet* pl = new Planet();
    *pl = createPlanet(s, UNKNOWN, 345);
    cout << getType(pl) << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
类型定义枚举{
像海王星一样,
天然气巨头,
陆地的
超级地球,
未知的
}飞机型号;
类型定义结构{
字符名[30];
平面型;
浮动距离到地球;
}行星;
Planet createPlanet(char myname[],PlanetType mytype,double mydistance)
{
行星pl;
strcpy_s(项目名称、我的姓名);
pl.type=mytype;
pl.distanceToEarth=我的距离;
返回损益;
}
char*getName(行星*p)
{
返回p->name;
}
PlanetType getType(行星*p)
{
返回p->type;
}
双倍距离(行星*p)
{
返回p->distanceToEarth;
}
int main()
{
char s[30]=“Nume”;
静态行星*pl=新行星();
*pl=创建行星(s,未知,345);
库特
static Planet*pl=new Planet()的目的是什么

Planet
是一个结构。
new
返回指向类型的指针;在这里,您调用编译器生成的默认
Planet
构造函数。
new
为空的
Planet
分配内存,并返回指向该内存的指针

如注释中所述,此处不需要使用
static
,因为
pl
永远不会返回到调用函数

怎么可能有一个指向整个函数的变量pl

<> p>你认为它在C++中有什么功能?
a = f();
表示执行
f
,并返回分配给
a
的值

我试图掌握指针和动态内存的概念

在游戏的这个阶段,我建议尝试解决你自己处理的问题,而不是动态内存。C++在使用值语义时更容易理解。在介绍指针时,你就有了一个全新的复杂程度。现在是时候用

new
delete
卷起袖子了。到那时,你已经掌握了一些基本的语法,它就不会那么神秘了

我重写了你的程序,将Planet转换为一个类,并将只与Planet成员相关的函数作为成员函数移动到类中。我想你会同意它更简单、更短

#include <iostream>
#include <string>

using namespace std;

enum PlanetType {
    NEPTUNE_LIKE,
    GAS_GIANT,
    TERRESTRIAL,
    SUPER_EARTH,
    UNKNOWN
};

class Planet {
private:
    char name[30];
    PlanetType type;
    float distanceToEarth;
public:
  Planet( const char myname[], PlanetType mytype, double mydistance ) {
    strcpy(name, myname);
    type = mytype; 
    distanceToEarth = mydistance;
  }

  const char * getName() const { return name; }
  PlanetType   getType() const { return type; } 
  double getDistance() const { return distanceToEarth; }
};

int main() {
  Planet planet( "Nume", UNKNOWN, 345 );
  cout << planet.getType() << endl;
  return 0;
}
#包括
#包括
使用名称空间std;
枚举平面类型{
像海王星一样,
天然气巨头,
陆地的
超级地球,
未知的
};
类行星{
私人:
字符名[30];
平面型;
浮动距离到地球;
公众:
行星(常量字符myname[],PlanetType mytype,双mydistance){
strcpy(name,myname);
类型=mytype;
距离地球=我的距离;
}
const char*getName()const{return name;}
PlanetType getType()常量{返回类型;}
double getDistance()常量{返回distanceToEarth;}
};
int main(){
行星(“Nume”,未知,345);

你难道不想了解你在做什么吗?:)我甚至不认为
pl
可以作为一个指针开始。而且,它不是“指向整个函数”,它指向一个
Planet
对象。语法
newplanet()
动态分配一个
planet
对象并默认初始化它。
pl
不指向函数。它指向一个
planet
对象。
main
static
局部变量是无意义的,
static
在这里没有任何效果。你似乎对某些事情很困惑,但我不知道e是什么编辑:你可能是混合C和C++资源。如果你在遵循教程,请确定它们是C++而不是C教程。尽量只使用至少在2011之后制作的资源。我也看不到你所拥有的全局函数的含义,或者为什么使用<代码> TyPulfF。请投资和学习构造函数和M。余烬函数。@Someprogrammerdude这是因为这是C,上面有
std::cout
。“如果没有别有用心的话,它是过时的或不受欢迎的,或者充其量只是一厢情愿的传说。”这是我一整天听到的最出人意料的阴谋论。