【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

标签:【VS开发】 【编程开发】


主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性。以及如何访问和利用memset赋值等操作。

直接给出代码说明:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct TEST
{int id;char name[2][10];
};struct TEST2
{int id;char *name;
};// 测试传参可行否
void changeName(TEST* test)
{for (int i = 0; i < strlen(test->name[1])-1; i++){test->name[1][i] = 'd';}
}int main(int argc, _TCHAR* argv[])
{TEST test = { 0, { "test1", "test2" } };printf("size of struct = %d\n", sizeof(test));TEST2 test2;test2.name = (char*)malloc(20);printf("size of struct = %d\n", sizeof(test2));printf("%s\n", test.name[1]);changeName(&test);printf("%s\n", test.name[1]);return 0;
}

size of struct = 24
size of struct = 8
test2
dddd2
请按任意键继续. . .

结构体中的数组内存空间跟其它变量是一致的,整个结构体在一片连续的内存中;而对于结构体中定义的指针,它其实就是一个指针变量,跟数组完全不同,所以上面定义的情况看,指针变量的大小也是4个字节,加上int型变量4个字节,总计8个字节。而指针变量后续动态申请的内存是存放在别的地方,跟这个结构体的内存不连续。如果直接对结构体进行清零操作,比如获取结构体指针的首地址,然后得出结构体的size,利用memset进行清零操作,那么很简单,定义为数组的结构体可以直接清零成功,而对于指针的结构体清零,则导致结构体中指针指向了0x0000即NULL指针。毫无疑问!

另外,关于函数传参,实际上不管是结构体还是基本变量比如int,参数都一样,传递变量的地址(&变量)到函数中就可以访问了。结构体也一样是变量,只不过是自己定义的数据结构而已,只要将结构体变量的地址传入,所有对地址的操作都是可以在函数间保存的。


2016-10-26 11:09
张朋艺 pyZhangBIT2010@126.com

转载于:https://www.cnblogs.com/huty/p/8517768.html

【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明...相关推荐

  1. C语言高级编程:结构体中定义数组的“妙用”

    1. 说明 1)相同类型结构体变量可以直接赋值 2)在结构体中定义一个数组,可以用赋值语句拷贝整个数组,这也是数组间赋值的一个间接实现方式 3)在结构体中定义一个数组,可以传值调用的方法把它传递给函数 ...

  2. struct 结构体中字符串数组赋值的问题

    #include <stdio.h> #include <stdlib.h> #include <string.h>typedef struct STUDENT { ...

  3. 【C语言】深度探索offsetof,解析结构体的成员数组和指针

    目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...

  4. C语言 如何给结构体中的数组赋值

    说明: 在建立socke通信的t过程中,我想将所有变量都封装在一个结构体中,但是其中 IP地址需要数组保存,无法直接赋值: 偶然间看到了处理方式 示例 #include <stdio.h> ...

  5. c结构体里的数组与指针

    /* 訪问成员数组名事实上得到的是数组的相对地址.而訪问成员指针事实上是相对地址里的内容 */ struct buf_str {int length;char buf[0]; };struct foo ...

  6. c结构体中定义的成员指针赋值与结构体指针作为成员函数参数的使用

    c语言定义结构体可以直接声明结构体变量的,如下 struct Student{char *name; int age; }xiaoming 这样以来,我们就定义了一个结构体类型,同时声明了一个结构体变 ...

  7. matlab向结构体中的数组自动赋值_matlab之结构体数组struct

    以下内容来自于:https://blog.csdn.net/u010999396/article/details/54413615/ 要在MALTAB中实现比较复杂的编程,就不能不用struct类型. ...

  8. matlab向结构体中的数组自动赋值_数组 – 在Matlab结构体数组的每个元素中更新一个字段...

    只是一个说明,交易是不必要的: [arr.val] = newVals{:}; % achieves the same as deal(newVals{:}) 唯一的其他方式我知道如何做(没有foor ...

  9. c语言结构体中整形数组初始化,c – 将{0,0}在结构体中初始化数组?

    线 A C = {0,0}; 8.5.1聚合[dcl.init.aggr] / 12 Braces can be elided in an initializer-list as follows. I ...

最新文章

  1. 痛苦是能让人成长的,所以不要害怕遇到痛苦
  2. WebConfig的经典使用,大家一起交流一下吧!!!
  3. java 获取远程文件_java获取远程文件
  4. anaconda环境中使用sudo python报错
  5. Bailian2709 求出e的值【数列求和】(POJ NOI0105-35)
  6. 网线RJ45接口排线示意图(做网线备用)
  7. 锂电池的充电原理以及快充原理
  8. QT 字符乱码的原因
  9. cygwin安装linux教程,cygwin安装教程 cygwin安装使用方法
  10. 腾讯大厂2022校招来啦
  11. 物理量与单位符号的书写标准
  12. 在北京工作5年的程序员,通过人才引进入职县城事业编,月薪曝光
  13. 外币兑换c语言编程,货币转换 C
  14. 病人信息管理html,基于JSP住院病人信息管理系统本科.doc
  15. 为什么点开桌面计算机那这么慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
  16. 这是一篇有温度的NLP秋招面经
  17. Dart学习笔记六:集合类型详解
  18. 智能生活 App SDK 如何实现设备控制
  19. 转行软件测试4年,从初级入门到高级测试,听听他的经验分享
  20. 科技青年 | 训练机器说话20年,他勇闯阿里巴巴宝库

热门文章

  1. LA 6474 Drop Zone (最小割)
  2. NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
  3. Android开发之搜Ya项目说明(3)
  4. 30个Oracle语句优化规则详解
  5. HDUOJ---1863畅通工程
  6. 一种获取过程调用堆栈信息的简单方法
  7. VMware Server使用经验记录
  8. C#之 VS2008 之 Extension Methods
  9. Opencv3.0+vs2015
  10. 异步接口同步返回_Dubbo客户端异步接口的实现背景和实践