日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/4/14 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【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++开发】结构体中的数组与指针的内存分配情况说明...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。