【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
2016-10-26 11:21
1001 查看
【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
相关文章推荐
- 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析
- 内存分配详解、指针与数组[C++][内存管理]
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- 结构体指针数组 内存分配 释放
- C/C++动态内存分配之用malloc和指针实现动态数组排序
- 程序员面试(5):c/c++编程时,变量的内存分配情况
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理]
- C\C++中结构体变量与结构体指针内存分配问题
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- 【C/C++】【VS开发】结构体存储空间数据对齐说明
- 关于C++中结构体及其指针成员的内存分配和释放
- 内存分配详解、指针与数组[C++][内存管理]
- 内存分配详解、指针与数组[C++][内存管理] --转载于--Gaius Julius Caesar
- 内存分配详解、指针与数组[C++][内存管理]
- C++中 关于多维数组在计算机内存中的分配情况
- 内存分配详解、指针与数组[C++][内存管理]
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- 【VS开发】【C/C++开发】传递双重指针申请内存,典型用法
- 内存分配详解、指针与数组[C++][内存管理]