在C++11标准中,是允许对结构体进行以下赋值操作的:
既可以部分初始化,也可以全部初始化。输出结果为 Renee。
但是万万不可进行下列赋值操作:
理由是"hahahaha"为const char类型,不可以赋值给title这个char类型的数组。
但是,如果把title改为字符指针呢?
#include <bits/stdc++.h>
struct book{
char title[200];
char author[200];
float val;
};
int main()
{
struct book lib {
// "The Pious Pirate and The Devious Damsel",
"Renee",
1.95
};
printf("%s",lib.title);
return 0;
}
既可以部分初始化,也可以全部初始化。输出结果为 Renee。
但是万万不可进行下列赋值操作:
#include <bits/stdc++.h>
struct book{
char title[200];
char author[200];
float val;
};
int main()
{
struct book lib;
lib.title="hahahaha";
return 0;
}
理由是"hahahaha"为const char类型,不可以赋值给title这个char类型的数组。
但是,如果把title改为字符指针呢?
#include <bits/stdc++.h>
struct book{
char *title;
const char *author;
float val;
};
int main()
{
struct book lib;
lib.title="hahahaha";
lib.author="hohohoho";
printf("%s %s",lib.title,lib.author);
return 0;
}
输出是:hahahaha hohohoho
说明无论把字符串赋给char*p还是const char*p的字符指针都是可以的。(如果是数字数组,则完全可以单独赋值)
但是,用指针会有一个潜在的危险!!
由于该指针未经过初始化,地址可以指向任何值。所以这一操作可能会会导致程序崩溃!
如果非要想用数组表示然后在后面进行初始化,则可以使用.运算符进行赋值。
//此处title和author为字符数组
struct book lib={ .title="Renee",
.author="James",
25.99};
//或者直接使用scanf给字符数组赋值
scanf("%s",title);
本文探讨了C++11标准下结构体的初始化方式,包括数组与指针的不同表现,以及潜在的风险。
2万+

被折叠的 条评论
为什么被折叠?



