初学C语言对于结构体变量名的一些想当然

在初学C语言时到结构体总与数组联系在一起,这就形成了很多想当然,所以实践是检验真理的唯一途径,上代码:

#include <stdio.h>
#include <stdlib.h>
/*结构体变量的值是整个结构体。结构体变量名就是变量名。
象int a一样,只是printf 处理不了结构体。通过 printf
输出结构体,结果是没有意义的(整个结构体复制堆栈中,按
照对应的格式输出)。取地址要用&,不用钻牛角尖,不直接
输出就行了*/
typedef struct {
 short d;
 short e;
}DATA2;
typedef struct {
 int a;
 short b;
 DATA2 c;
 char f;
}DATA1;
void test01() {
 DATA1 stu = {0};
 printf("长度=%d\n", sizeof(stu));
 printf("a的地址%p\n", &stu.a);
 printf("b的地址%p\n", &stu.b);
 printf("d的地址%p\n", &stu.c.d);
 printf("e的地址%p\n", &stu.c.e);
 printf("f的地址%p\n", &stu.f);
}
/*结果
a a a a
b b d d 
e   f 
*/

void test02() {
 DATA2 stu = { 20,'a' };
 char *p = &stu;
 printf("d的值是%c\n", *(short*)(p + 2));
 //(short*)p->c是错的,一个char型指针不能指向结构体成员
}
void test03() {
 DATA2 li = { 16, 5 };
     printf("%8x\n", li);
  //printf("%x\n", *li);是错的, * 操作的只能是指针
     printf("%p\n", &li);
     printf("%8x\n", *(int *)&li);
}

结构体作为一种自定义数据类型,结构类似于数组,但是结构体名 与数组名有很大的区别:

数组名是作为内存中固定不可修改的地址常 量而存在,不可以直接赋值。
而结构体相当于int,double之类的系统内定类型,代表了一段内存空间的内容。是可以整体赋值的,结构体中的数组,在结构体赋值的过程中,也是可以针对每个元素一一赋值的。

test03()运行结果:

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值