有人可以为我解释这段代码吗?
typedef char AirportCode[4];
typedef struct NodeTag{
AirportCode Airport;
struct NodeTag *link;
}Node;
Node *L;
Run Code Online (Sandbox Code Playgroud)
这是我的数据结构类的代码片段.实现这段代码是为了在链表节点中保存数据.我想要了解的是NodeTag通常用于什么?是否希望结构在其内部保持另一个迭代,因为缺少更好的单词?NodeTag与大括号之后的内容有什么区别,在本例中为"Node"?
可以帮助使代码纯粹C.
struct edge
{
char key;
char values[5];
};
edge* a = new edge[9];
Run Code Online (Sandbox Code Playgroud) 我正在阅读一些代码并遇到以下语句:
struct sockaddr_in server
Run Code Online (Sandbox Code Playgroud)
我知道这sockaddr_in是一些预定义的,struct但为什么我们把它struct作为前缀?也如下所示,尝试了类似的事情
我不能只写:
sockaddr_in server
Run Code Online (Sandbox Code Playgroud) 我在一次采访中被要求序列化数据(因此它可以存储在缓冲区中并通过某个网络发送)。这就是我想出的-
struct AMG_ANGLES {
float yaw;
float pitch;
float roll;
};
char b[sizeof(struct AMG_ANGLES)];
char* encode(struct AMG_ANGLES *a)
{
std::memcpy(b, &a, sizeof(struct AMG_ANGLES));
return b;
}
void decode(char* data)
{
// check endianess
AMG_ANGLES *tmp; //Re-make the struct
std::memcpy(&tmp, data, sizeof(tmp));
}
Run Code Online (Sandbox Code Playgroud)
这样对吗?任何人都可以提供替代设计吗?我没有收到回电,所以我只是想了解我可以改进的地方。
我正在尝试编写一个收集学生信息的程序.我正在使用一系列学生(结构)
typedef struct {
char name[50];
struct Course* course;
}Student;
Run Code Online (Sandbox Code Playgroud)
在我的主要()我这样做了
Student* stds = (Student*) malloc(app.std_cnt * sizeof(*stds) );
getStdData(stds);
Run Code Online (Sandbox Code Playgroud)
这是getStdData函数
void getStdData(struct Student *students){
int i;
char name[50];
Student std;
printf("\n");
for(i = 0; i < app.std_cnt; i++){
printf("std [%i] name : ",i+1);
scanf("%s",&name);
strcpy(std.name,name);
students[i] = std;
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译我得到
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
gpa.c
gpa.c(124): error C2440: '=': cannot convert from 'Student' to 'Student'
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?为什么抱怨学生转学?他们不是同一类型?
我按照本指南设置了一个基本套接字服务器:https: //www.geeksforgeeks.org/socket-programming-cc/
所以,我知道当你使用关键字struct来定义数据结构时,但正如你在示例中所看到的,它使用结构关键字创建了sockaddr_in的实例,但它不是用于创建/定义结构,而是用于创建一个实例.
所以我想知道为什么在本指南中定义一个sockaddr_in结构,他之前放置'structure'关键字,我没有尝试它,它正确编译.
背后有什么理由吗?
struct node
{
int data;
struct node *next;
}
cout<<sizeof(struct node)<<sizeof(node)<<endl;
//no error, C++ allows us to use sizeof(struct node) and sizeof(node) both.
Run Code Online (Sandbox Code Playgroud)
而我们不能用int数据类型做同样的事情
int a;
cout<<sizeof(int) <<sizeof(a) <<endl;//there is no error here
//BUT
cout<<sizeof(int a) <<endl;//this throws an error
Run Code Online (Sandbox Code Playgroud)
我理解"struct node"本身就像一个数据类型,可用于声明"struct node"类型的变量.通过sizeof()如何使用int的行为,可以理解sizeof(struct node)等同于sizeof(datatype),因此是正确的用法.
但是sizeof(节点)如何工作呢?它不会抛出任何错误."node"本身不能用于声明任何其他变量,它需要是"struct node"来声明变量.
当我定义一些随机结构时,例如在Visual Studio中的cpp文件中
1) struct CAddition {
int x, y;
CAddition(int a, int b) { x = a; y = b; }
int result() { return x + y; }
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我定义一些结构对象
CAddition foo;
Run Code Online (Sandbox Code Playgroud)
它没有任何错误,但如果我最后使用任何别名
2) struct CAddition {
int x, y;
CAddition(int a, int b) { x = a; y = b; }
int result() { return x + y; }
}CAddition;
Run Code Online (Sandbox Code Playgroud)
我不能简单地定义任何对象而不在定义之前使用struct
struct CAddition foo;
Run Code Online (Sandbox Code Playgroud)
或者另一种方法是添加
typedef struct CAddition {
Run Code Online (Sandbox Code Playgroud)
在方法2中,为了避免每次都重写struct,我的问题是这两个定义之间的区别是什么,方法1不使用更少的关键字,更容易使用在什么条件下我们应该使用结构的第二个定义.