给结构体字符串赋值,之前也是这么做的,这次怎么报错了
#include<winuser.inl>#include<stdio.h>
#include <cstdlib>
#include<string.h>
union Test
{
int i;
double pi;
char *str;
};
int main()
{
union Test test;
test.i = 520;
test.pi = 3.14;
test.str = "fishc";
printf("address of test.i: %p\n", &test.i);
printf("address of test.pi: %p\n", &test.pi);
printf("address of test.str: %p\d",&test.i);
return 0;
} 1、union 不是结构体,结构体是struct ,union 中文叫联合。
2、 printf("address of test.str: %p\d",&test.i); \d 不是转义符。 xieglt 发表于 2021-1-15 18:57
1、union 不是结构体,结构体是struct ,union 中文叫联合。
2、 printf("address of test.str: %p\d",&tes ...
不是这个地方的问题,我改过了 本帖最后由 jackz007 于 2021-1-15 19:54 编辑
即便是结构体,也只是支持定义时初始化,不可以在运行时整体赋值,主要是不可以通过等号为字符串成员赋值。
联合是多个成员共用同一块内存,通常是为其中的某一个成员赋值,其它成员自动就会获得赋值,没有必要对所有成员一一赋值,每次新的赋值都是对前面赋值的否定和覆盖。
楼主可以试一下这个代码:
#include <stdio.h>
union Test {
int i ;
char c ;
} ;
int main(void)
{
union Test test = {0x44434241} ;// 初始化的是整个联合体,而不是哪一个成员
int i ;
printf("%x\n" , test . i) ;// 按十六进制整型数显示 test . i
for(i = 0 ; i < 4 ; i ++) printf("%c" , test . c) ;// 按字符显示 test . c
printf("\n") ;
}
页:
[1]