一个关于结构体和字符数组的有关问题
一个关于结构体和字符数组的问题
#include<iostream>
using namespace std;
struct A
{
int n;
char s;
};
main (){
char *str={"hello,world"};
struct A *a=(struct A*)str;
printf("%c\n",a->s);
}
输出的是o
为什么
#include<iostream>
using namespace std;
struct A
{
int n;
char s[1];
};
main (){
char *str={"hello,world"};
struct A *a=(struct A*)str;
printf("%c\n",a->s);
}
输出的是$
------解决方案--------------------
第一个
INT N占用4字节,char类型占用1个字节
所以打招呼依照顺序,S会得到Ø
第二个
一样,INT N,占用4字节,
但是char类型[1]是阵列,再结构中所放的是指标,所以是4字节
依照顺序,S[1]的内容是“邻,窝”转成十六进制的值所指向的位置
------解决方案--------------------
1. 邪恶的类型转换,后果自负!!
2.
3.
#include<iostream>
using namespace std;
struct A
{
int n;
char s;
};
main (){
char *str={"hello,world"};
struct A *a=(struct A*)str;
printf("%c\n",a->s);
}
输出的是o
为什么
#include<iostream>
using namespace std;
struct A
{
int n;
char s[1];
};
main (){
char *str={"hello,world"};
struct A *a=(struct A*)str;
printf("%c\n",a->s);
}
输出的是$
struct
c
字符
------解决方案--------------------
第一个
INT N占用4字节,char类型占用1个字节
所以打招呼依照顺序,S会得到Ø
第二个
一样,INT N,占用4字节,
但是char类型[1]是阵列,再结构中所放的是指标,所以是4字节
依照顺序,S[1]的内容是“邻,窝”转成十六进制的值所指向的位置
------解决方案--------------------
1. 邪恶的类型转换,后果自负!!
char *str={"hello,world"};
struct A *a=(struct A*)str;
2.
struct A
{
int n;
char s;
};
A a;
//a.s是对象a的成员s.的值,类型是char
printf("%c", a.s);//这里相当于int t = a.s; char c = (char)t; 最后输出c
3.
struct A
{
int n;
char s[1];
};
A a;
//a.s是对象a的成员s的地址,类型是char*
printf("%c", a.s);//这里相当于int t = (int)a.s; char c = (char)t; 最后输出c