同类型结构体之间赋值不一定有效
同类型结构体之间赋值不一定有效
今天为这个问题debug好久...
之前看到一个关于结构体使用的技巧, 这个技巧可以避免内存零碎. 保证结构体所属内存尽量不要零散化.
struct struct_name
{
element_type varible;
...;
element_type pointer[0];
}
关于该使用方法的介绍.
http://blog.csdn.net/cinmyheart/article/details/28985843
对于普通的结构体,
struct num{int x;int y;};
这样的类型的结构体就能够通过赋值operator =赋值
可是!
上面介绍的那种特殊使用方法不行.
#include <stdio.h>
#include <stdlib.h>int main()
{struct node{int a;char string[0];};struct num{int x;int y;};struct num m = {1,3};struct num n = {2,4};/*** ATTENTION! m = n;*/m = n;printf("m.x:%d m.y:%d n.x:%d n.y:%d\n",m.x,m.y,n.x,n.y);struct node* p_string_1 = (struct node*)malloc(sizeof(100)+sizeof(int));struct node* p_string_2 = (struct node*)malloc(sizeof(100)+sizeof(int));char hello[] = {"Hello world\n"};char panic[] = {"Don't panic\n"}; int tmp = 0;for(tmp = 0;tmp < sizeof(hello)/sizeof(hello[0]); tmp++){p_string_1->string[tmp] = hello[tmp];}for(tmp = 0;tmp < sizeof(panic)/sizeof(panic[0]); tmp++){p_string_2->string[tmp] = panic[tmp];}printf("1:%s2:%s\n",p_string_1->string,p_string_2->string);/*** ATTENTION! HERE IS AN EVEIL!*/*p_string_1 = *p_string_2;printf("1:%s2:%s\n",p_string_1->string,p_string_2->string);free(p_string_1);free(p_string_2);return 0;
}
猜猜看,打印的结果是什么?
同类型结构体之间赋值不一定有效相关推荐
- Matlab 结构体之间相同字段的赋值
Matlab 结构体之间相同字段的赋值 假设有两个结构体 main_subject 和 all_subject .其中 main_subject 中包含了某位同学的主修成绩和学号姓名信息,需要将这些信 ...
- go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别
入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...
- C语言中结构体直接赋值
FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其 ...
- C语言自定义变量类型——结构体详解
文章目录 前言 为什么要学习结构体 什么是结构体 一.结构体:struct 1.结构体类型的声明 (1)结构体的基础知识 (2)结构体的声明 (3)特殊的声明 2.结构体的自引用 3.结构体变量的定义 ...
- c语言如何将值赋给结构体指针,C语言给结构体指针赋值
<C语言给结构体指针赋值>由会员分享,可在线阅读,更多相关<C语言给结构体指针赋值(6页珍藏版)>请在人人文库网上搜索. 1.指向结构体的指针 在C语言中几乎可以创建指向任何类 ...
- 结构体的赋值和初始化与取出结构体变量中的成员
1 /*结构体的赋值和初始化*/ 2 3 # include <stdio.h> 4 5 struct Student 6 { 7 int age; 8 ...
- Qt工作笔记-QByteArray与自定义结构体之间的转化(可用于网络传输,以及数据回调)
目录 理论 程序 理论 在Socket中,数据一般是char型(一般情况下,其实最好是用uchar来传输,避免莫名其妙的错误,但用char也是可以的),而在Qt里面可以使用QByteArray,这个在 ...
- C语言对结构体进行赋值操作
C语言对结构体进行赋值操作 一.说明 二.环境 三.代码 四.运行 一.说明 定义一个结构体: 并对其进行初始化操作,赋值操作,打印1.注意, struct 定义的位置可以在main函数的外边2.用的 ...
- 结构体怎么赋值_c语言学习之基础知识点介绍:结构体的介绍
一.结构体的介绍 /* 语法:struct 结构体名{成员列表;};切记切记有分号!说明:成员列表就是指你要保存哪些类型的数据.注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型.因为类型 ...
最新文章
- JNDI学习总结(1)——JNDI入门简介
- 第12个双11,天猫的“造新”运动
- Qt Creator共享项目设置
- 【数据结构与算法】之深入解析“砌墙”的求解思路与算法示例
- 如何讲页面打入jar包中_如何把我的Java程序变成exe文件?
- 实现textarea限制输入字数
- HTML5 小动画例子
- Sublime配置java运行环境
- 【ViPER音效插件】,完美提升电脑音乐播放效果
- 中山一院:华南第一综合性三甲医院的 IT 基础架构转型实践
- 新高考教师增值评价方式的再研究
- springboot模板项目搭建:代码生成器AutoGenerator
- 清洁机器人--屏幕显示LCD方案之MCU GD32F470及其液晶RGB接口的LCD驱动代码
- 台式计算机时间跳动,电脑时间总是自动跳
- 电脑PPTP更换IP教程
- 深入解析Tensor索引中的Indexing Multi-dimensional arrays问题
- 功率开关的RC-Snubber电路设计
- vim中字母大小写变换
- 【uni-app】封装websokcet以及使用方法
- 2022年9月青少年软件编程(图形化)等级考试试卷--三级--跳高比赛