struct (指针题)不能正确输出hello





















正确答案: B   你的答案: A (错误)

struct data3_t *pData=(struct data3_t*)&str; printf("data:%s%s\n",str.data,(char*)(&(pData->data[0])));
struct data2_t *pData=(struct data2_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data[0]));
struct data1_t *pData=(struct data1_t*)&str;printf("data:%s%s\n",str.data,(char*)(pData->data));
struct str_t *pData=(struct str_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data));
链接: https://www.nowcoder.com/questionTerminal/4a4c163af45540a5a39d20db413af1e6
来源:牛客网
这里面的关键是:  “取这个变量的地址”  和  “把变量的值当作地址”  的区别。这题应该  “取变量的地址”
主要是因为C++中定义了箭头运算符,箭头运算符把解引用和成员访问两个操作结合在一起,
也就是说it->men 和 (*it).men表达的含义相同,那么也就是说pData->data[0]实际上指的是数组首元素而不是地址


int  main()
{
     char *s[1] = { "dd"  };
     cout << *s[0] << endl;
     cout << s[0] << endl;
}

第一个输出 d,
第二个输出 dd,

在32位小端的机器上,如下代码输出是什么:

输出是:
0x201 , 0x605 , 0x807060504030201 , 0x0

小端机器的数据高位字节放在高地址,低位字节放在低地址。
char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
1,char一字节,直观呈现的结果为:0x08-07-06-05-04-03-02-01 (从后到前下标为0-7)
2,short两字节,直观呈现 的结果 为: 0x0807-0605-0403-0201  (从后到前  下标  为0-3) :
*pshort从0开始,所以0x201;
*(pshort+2)从2开始,所以0x605;
3,int64八字节,直观呈现 的结果 为 0x0807060504030201  (从后到前  下标  为0) :
*pint64从0开始,所以0x807060504030201;
4,int四字节,直观呈现为0x08070605-04030201 (从后到前  下标  为0-1) :
*(pint+2))从2开始,但是最多只到下标1,后面位置默认为0。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值