c语言结构体赋值_已解决
本帖最后由 涛4091 于 2023-2-23 11:02 编辑#include<cstdio>
#include<iostream>
using namespace std;
#define MaxSize 50
//定义顺序表结构体
struct SqList{ //创建类
int data;
int length;
// int data = {5,4,7,8,9,1,2,3,4,5,6};
// int length = 11;
};
//定义方法
int ListDelete(SqList &L){
int min = L.data;
int flag;
if(L.length==0){
cout<<"顺序表中无元素可删除"<<endl;
return 0;
}
for(int i=1;i<L.length;i++){
if(L.data < min){
min = L.data;
flag = i;
}
}
L.data = L.data;
return min;
}
int main(){
//类的实例化
// SqList list1={{5,6,7,7,1,9,5,7,8},9};
struct SqList list1;
list1.data = {1,3,4,3,5,6,7,4,9};
list1.length = 9;
int min_ele;
cout<<"初始的顺序表:"<<endl;
for(int i=0;i<list1.length;i++){
cout<<list1.data<<" ";
}
cout<<endl;
min_ele = ListDelete(list1); //往前的语句顺序表list1没有被调整,执行了函数后被整容;
cout<<"修改之后的顺序表为:"<<endl;
for(int i=0;i<list1.length;i++){
cout<<list1.data<<" ";
}
cout<<endl;
cout<<"最小的元素为:"<<min_ele<<endl;
return 0;
}
如图 哪位兄弟来看看{:10_266:} 本帖最后由 jackz007 于 2022-9-24 15:53 编辑
结构型变量的初始化应该在定义的时候,一般不支持在定义后再进行整体赋值。就好像一般的数组那样。
struct SqList list1;
list1.data = {1,3,4,3,5,6,7,4,9};
list1.length = 9;
改这样试试
struct SqList list1 = {{1 , 3 , 4 , 3 , 5 , 6 , 7 , 4 , 9} , 9} ;
就是 3 句合成 1 句 struct SqList list1; //不需要加关键字struct
list1.data = {1,3,4,3,5,6,7,4,9}; // 写成 list1.data[]{...};试试 jackz007 发表于 2022-9-24 15:43
结构型变量的初始化应该在定义的时候,一般不支持在定义后再进行整体赋值。就好像一般的数组那样。 ...
结构型变量的初始化应该在定义的时候,一般不支持在定义后再进行整体赋值。就好像一般的数组那样。
楼主的这种做法,相当于"平面展开",应当可以被随意访问.好处是便于随意改,坏处是完全忽视了"结构"的初衷. #include <iostream>
using namespace std;
struct a
{
int *data;
int len;
a():data(0),len(0){};
~a(){ delete [] data; };
void set_len(int);
};
int main()
{
cout << "Hello world!" << endl;
a list1;
list1.set_len(6); //这样,使用 对像 的 类方法 进行 设置
return 0;
}
void a:: set_len(int l)
{
len=l;
data= new int;
for(int i=0;i<len;i++)
data=0;
}
你的写法问题在语法上,更重要的是对"结构"的认识存在一个差异,这应当不利于对C++的深入掌握.
看你贴子的意思,是想初始化几个成员变量是吗?
结构a,相当于你的结构,上面代码可以直接运行,你试试,若好用,请设为解决.谢谢. #include <iostream>
using namespace std;
struct a
{
int *data;
int len;
a():data(0),len(0){};
~a(){ delete [] data; };
void set_len(int);
void check_directly();
void check_backward();
};
int main()
{
cout << "Hello world!" << endl;
a list1;
list1.set_len(6); //这样,使用 对像 的 类方法 进行 设置
list1.check_directly();
list1.check_backward();
return 0;
}
void a:: set_len(int l)
{
len=l;
data= new int;
for(int i=0;i<len;i++)
data=i;
}
void a::check_directly()
{
cout<<"directly display:"<<endl;
for(int i=0;i<len;i++)
{
cout<<data<<" ";
}
cout<<endl;
}
void a::check_backward()
{
cout<<"backward display:"<<endl;
for(int i=len-1;i>-1;i--)
{
cout<<data<<" ";
}
cout<<endl;
}
加了正反两个遍历. 对类和结构 应当 采取 "内部"的做法,而不是在main中随意的访问类成员,随意的访问成员,是内部的事.
在main中,则是外部,此时,应当把注意力放到如何让 对像 做到响应用户的动作 或向应 其它 对像的 动作
比如:现在main中,data中的数字,给其它人用,或有某种用途,则可以设置反回整个 数组 或返回 数级中的某一个值,按使用意图,写方法:
int* return_data(); //返回整个data给main
int return_data(int);//反其中的一个下标给main
代码示例:见下楼 #include <iostream>
using namespace std;
struct a
{
int *data;
int len;
a():data(0),len(0){};
~a(){ delete [] data; };
void set_len(int);
void check_directly();
void check_backward();
int* return_data(); //返回整个data给main
int return_data(int);//反其中的一个下标给main
};
int main()
{
cout << "Hello world!" << endl;
a list1;
list1.set_len(6); //这样,使用 对像 的 类方法 进行 设置
list1.check_directly();
list1.check_backward();
int *p;
p = list1.return_data();
for(int i=0;i<list1.len;i++) //这里依赖直接访问成员变量len也是不对的思路
cout<<"*p = "<<p<<endl;
cout<<" = "<<list1.return_data(3);
return 0;
}
void a:: set_len(int l)
{
len=l;
data= new int;
for(int i=0;i<len;i++)
data=i;
}
void a::check_directly()
{
cout<<"directly display:"<<endl;
for(int i=0;i<len;i++)
{
cout<<data<<" ";
}
cout<<endl;
}
void a::check_backward()
{
cout<<"backward display:"<<endl;
for(int i=len-1;i>-1;i--)
{
cout<<data<<" ";
}
cout<<endl;
}
int* a:: return_data()
{
return data;
}
int a:: return_data(int i)
{
return data;
}
特别指出, 楼上代码中,有一个常常被大家忽视的重要问题:
必须统一有const的使用:
声明:
const int* return_data(); //返回整个data给main
main中使用部的数据时,应加个const
const int *p;
p = list1.return_data();
定义,同声明即可:
const int* a:: return_data()
{
return data;
}
通过以上的C++制度,才可以确保所有代码不会在想不到的地方被不经意地改动,即:
使用数据,就是使用,不能改动; {:10_254:} 和这个一个道理:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a;
a = {1, 2, 3, 4, 5};
return 0;
}
小甲鱼老师说过,初始化字符数组不能像这样初始化:
char fishc;
fishc = {"fishc"};
是一样的道理,字符数组可以用strcmp,int或者其他的只能一个一个赋值了
对于一次赋值,可能实在没有办法... #include<iostream>
#include<cmath>
using namespace std;
typedef structStr {
int a;
int* data;
}Str;
int main() {
Str s;
s.a = 12;
int as[] = { 1,2,3,4 };
s.data = as;
cout << s.data << endl;
return 0;
} {:10_254:} 谢谢 谢谢 {:10_256:}{:10_256:}{:10_256:}{:10_256:} {:5_108:} {:5_108:}
页:
[1]
2