c++使用结构体遇到的问题

C++语言 码拜 8年前 (2016-09-11) 1032次浏览
问题1:

#include <iostream>
#include <math.h>
#include <cstring> /* 字符处理库 */
#include <iomanip> /* setw(行宽) */
#include <cstdio>
using namespace std;
struct TEST{
    int i;
    int arr[10];
};
struct TEST A,B;//第一种
TEST A,B;//第二种
int main(){
    cout<<A.i;
}

上面在定义结构体变量的时候加与不加struct关键字有什么区别吗?
问题2:
结构体命名一般是什么样子的?见有人全部大写也有人全部小写。
问题3:
typedef这个关键字是做什么的?
问题4:

#include <iostream>
#include <math.h>
#include <cstring> /* 字符处理库 */
#include <iomanip> /* setw(行宽) */
#include <cstdio>
using namespace std;
struct TEST{
    int i;
    int arr[10];
};
int main(){
    TEST A;
    A={1,{1,1}};
    cout<<A.arr[1];
}

当没有在结构体中给变量赋值的时候可以这样A={1,{1,1}};写。

#include <iostream>
#include <math.h>
#include <cstring> /* 字符处理库 */
#include <iomanip> /* setw(行宽) */
#include <cstdio>
using namespace std;
struct TEST{
    int i = 0;
    int arr[10];
};
int main(){
    TEST A;
    A={1,{1,1}};
    cout<<A.arr[1];
}

在给结构体中的变量一个默认值时再A={1,{1,1}};就会报错。
问题5:
怎么样给结构体中的变量初始值
本人现在是在结构体中写一个初始化函数,在外面使用结构体变量前先执行下初始化函数,但感觉这样不是特别优美。

#include <iostream>
#include <math.h>
#include <cstring> /* 字符处理库 */
#include <iomanip> /* setw(行宽) */
#include <cstdio>
using namespace std;
struct TEST{
    int i;
    int arr[10];
    void init(){
        i = 0;
        memset(arr, 0, sizeof(arr));
    }
};
int main(){
    TEST A;
    A.init();
    cout<<A.arr[0];
}

望高手们指点!

解决方案

80

1.在C++中可以,但在c中不行。
3.你可以理解成取个别名,例如typedef int *p_int;
就是给int *取个别名叫p_int
int *a;等价于p_int a;

10

你把C语言中的结构体与C++中的类的使用方法混淆了,结构体本来是C语言中的概念,C语言中并没有什么成员函数之类的东西,但是到了C++的语法中,结构体其实是被默认成全部成员都是public的类的,建议你学习结构体的时候按照C语言的标准语法来处理(这样更容易理解结构体),假如要用到成员函数,还是老老实实定义类更好。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++使用结构体遇到的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)