C语言结构体中定义三维数组,然后在声明一个结构体的数组,这样可不可以? C++里如何申请三维动态数组/结构体组?

c \u8bed\u8a00\u4e2d\uff0c\u4e8c\u7ef4\u6570\u7ec4\u7ed3\u6784\u4f53\u548c\u4e09\u7ef4\u6570\u7ec4\u6709\u4ec0\u4e48\u4e0d\u540c\uff0c\u4ed6\u4eec\u7684\u8f93\u5165\u50a8\u5b58\u5404\u5728\u54ea\u91cc\uff1f\uff1f\uff1f

C\u8bed\u8a00\u4e2d,\u4e8c\u7ef4\u4e09\u7ef4\u6570\u7ec4\u7ed3\u6784\u4f53\u57fa\u672c\u662f\u4e00\u6837\u7684,\u4e00\u7ef4\u6570\u7ec4,\u5982a[3]\u5728\u5185\u5b58\u91cc\u8fd9\u6837:
a[0]a[1]a[2]
\u4e8c\u7ef4a[2][3]\u5c31\u53d8\u6210\u4e86 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
\u4e09\u7ef4a[2][2][3] a[0][0][0] a[0][0][1] a[0][0][2] a[0][1][0] a[0][1][1] a[0][1][2]....
\u4e0d\u8bba\u5982\u4f55\u90fd\u662f\u7ebf\u6027\u5b58\u50a8\u7684, \u56e0\u4e3a\u5185\u5b58\u53ef\u4ee5\u62bd\u8c61\u6210\u7ebf\u6027\u7684
\u5176\u5b9eC\u8bed\u8a00\u4e2d\u7684\u4e09\u7ef4\u6570\u7ec4\u4e00\u822c\u90fd\u662f\u5b9a\u4e49\u6210\u4e00\u4e2a\u6307\u5411\u4e8c\u7ef4\u6570\u7ec4\u7684\u4e00\u7ef4\u6570\u7ec4, \u4e8c\u7ef4\u6570\u7ec4\u4e5f\u4e00\u822c\u5b9a\u4e49\u6210\u6307\u5411\u6570\u7ec4\u7684\u6570\u7ec4

\u7ed9\u4f60\u7684\u7b80\u5355\u7684\u4f8b\u5b50:
(\u5faa\u73af\u4e2d)

// \u589e\u52a0\u5185\u5b58\u533a\u57df ---- \u4e8c\u7ef4\u6570\u7ec4(\u53ea\u80fd\u589e\u52a0, \u6ca1\u505a\u51cf\u5c11\u5904\u7406)
MayBe =(LONG **) realloc(MayBe, sizeof(LONG *) * (MBCount+1));
MayBe[MBCount] = (LONG *) malloc(sizeof(LONG)*10);

MayBe[MBCount][0] = x[0];
MayBe[MBCount][1] = x[1];
MayBe[MBCount][2] = x[2];
MayBe[MBCount][3] = x[3];
MayBe[MBCount][4] = x[4];
MayBe[MBCount][5] = x[5];
MayBe[MBCount][6] = x[6];
MayBe[MBCount][7] = x[7];
MayBe[MBCount][8] = x[8];
MayBe[MBCount][9] = x[9];
MBCount ++;

\u5220\u9664:
for(i=0; i<MBCount; ++i)
if(MayBe[i]) free(MayBe[i]);
free(MayBe);

\u76f4\u63a5\u4ece\u6211\u7684\u4e00\u4e2a\u7a0b\u5e8f\u4e2d\u62a0\u51fa\u6765\u7684:P

\u8fd9\u91cc\u6ce8\u610f\u7684\u662f,\u4e0d\u8981\u628a\u6307\u9488\u8ddf\u6570\u7ec4\u5f04\u6df7\u4e86,\u867d\u7136\u5185\u5b58\u53ef\u4ee5\u7528\u6570\u7ec4\u7684\u5f62\u5f0f\u8bbf\u95ee,\u4f46\u4ed6\u4eec\u5b9e\u9645\u4e0a\u662f\u4e0d\u4e00\u6837\u7684,\u6570\u7ec4\u6bd4\u6307\u9488\u591a\u4e00\u6b21\u5bfb\u5740\u64cd\u4f5c.

#include

using namespace std;

int main()
{
//[3]4] //\u4e09\u884c\u56db\u5217\u7684\u4e8c\u7ef4\u6570\u7ec4
int x,y;
int i,n,k;
x=3;
y=4;

int **p;

p = new int*[x]; //\u884c //\u7533\u8bf7\u884c\u7684\u7a7a\u95f4
//\u6bcf\u884c\u7684\u5217\u7533\u8bf7\u7a7a\u95f4
for(i=0; i<x;i++)
{
p[i] = new int [y];
}

//\u8d4b\u503c\uff0c
k=0;
for(i=0;i<x;i++)
{
for(n=0;n<y;n++)
{
p[i][n] = k;
k++;
}
}

//\u663e\u793a\u521a\u624d\u7684\u8d4b\u503c
for(i=0;i<x;i++)
{
for(n=0;n<y;n++)
{
cout << p[i][n] << "\t";
}
cout << endl;
}

//\u5220\u9664\u521a\u624d\u7533\u8bf7\u7684\u5185\u5b58
for(i=0;i<x;i++)
{
delete [] p[i];
}

delete [] p;

return 0;

这么定义是没问题的,编译肯定是没有问题的([31]后面是不是少了一个分号)。但是关键是struct time a[10];定义在哪了(这么定义相当于37200个int类型)。


如果是一个全局变量,那好说,这个占用数据段的空间,一般来说数据段空间比较大,能够分配出来这么大空间。


如果只是一个局部变量的话,那很有可能会导致堆栈溢出。这个a需要的是145K字节的内存,堆栈空间没有这么大的,局部变量搞不出来这么大。


推荐如下的写法,使用动态内存来分配:

struct time *a;
a = (struct time *)malloc(sizeof(struct time) * 10);


当然可以。

  • 缁欏嚭涓夌淮绌洪棿涓鐨n涓偣(涓嶈秴杩10涓),姹傚嚭n涓偣涓や袱涔嬮棿鐨勮窛
    绛旓細typedef struct Point { int x;int y;int z;}Point; //瀹氫箟涓涓潗鏍缁撴瀯浣 double Distance(Point *p1,Point *p2){ int x=(p1->x)-(p2->x);int y=(p1->y)-(p2->y);int z=(p1->z)-(p2->z);double temp=(double)(x*x+y*y+z*z);return sqrt(temp);}//姹備袱鐐归棿鐨...
  • 鍦C璇█涓鈥%鈥3d鈥濇槸浠涔堟剰鎬濆晩?
    绛旓細};/*瀹氫箟缁撴瀯浣*/ 鈥︹︹ain(){ struct Data * p;/*澹版槑鎸囬拡鍙橀噺p*/ 鈥︹ = p->next;/*灏唍ext涓殑鍊艰祴缁檖*/ } 閾捐〃鎸囬拡鏄C璇█鐨涓涓毦鐐癸紝浣嗕篃鏄噸鐐癸紝瀛︽噦浜嗛潪甯告湁鐢ㄣ傝浠旂粏璁插氨蹇呴』鍏堣鍙橀噺銆佹寚閽堛備粈涔堟槸鍙橀噺锛熸墍璋撳彉閲忥紝涓嶈娴呮樉鐨勮涓轰細鍙樺緱閲忓氨鏄彉閲忋傚鐢ㄦ垜浠櫌闀跨殑闂瘽...
  • vector <int>浠涔堟剰鎬,鏄笉鏄敓鎴愪竴涓彉闀垮害鐨勫悜閲
    绛旓細vector鏄疌++鐨勬爣鍑嗗簱閲岀殑涓涓ā鏉跨被锛屽搴旂殑鏄竴涓彉闀挎暟缁勩備絾鏄痸ector涓嶉傚悎鐢ㄤ綔澶氱淮鏁扮粍銆<int>琛ㄧず鏁扮粍閲岀殑鍏冪礌閮芥槸int绫诲瀷銆傚鏋滀綘闇瑕佺殑鏄竴涓畾闀鐨勪笁缁存暟缁勶紝閭d箞鐩存帴瀹氫箟灏卞彲浠ヤ簡銆傛瘮濡俰nt b[10][10][10];灏辨槸涓涓10脳10脳10鐨勪笁缁存暟缁勩傝ˉ鍏咃細濡傛灉浣犳兂瑕佺殑鍙槸鍙橀暱涓夌淮鏁扮粍鐨勫姛鑳斤紝瀹屽叏...
  • C 绋嬪簭绾犻敊
    绛旓細寤鸿浣犲厛鐪嬬湅缁撴瀯浣鍜屾寚閽堟柟闈㈢殑鐭ヨ瘑.甯屾湜浣犺兘澶熻В鍐抽棶棰.瀵逛簡,浣犺繖涓▼搴忔湁涓槑鏄剧殑閿欒,涓嬮潰杩欎釜鍑芥暟鏄笉鏄鏈変釜杩斿洖鍊艰鍙ュ憿?char sort(char a[][2][8]){ ...} 涔熷彲浠ョ敤涓夌淮鏁扮粍瀹炵幇...浠g爜濡備笅:include<stdio.h> include<string.h> define M 10//瀹氫箟杈撳叆鍛樺伐涓暟 void sort(char ...
  • C璇█涓浠涔堟槸鏁扮粍鏄犲儚鍑芥暟甯搁噺鍩哄潃
    绛旓細杩欓噷寮曠敤涓ュザ濂惰憲鐨勬暟鎹缁撴瀯锛氫互涓嬭鏁扮粍鏄犲儚鍑芥暟鐨勫叕寮忔潵婧愶細浠ヤ笅璁鏁扮粍涓暟缁鍒濆鍖朓nitArray(...)鐨勫畾涔夐噷锛屾暟缁鏄犲儚鍑芥暟甯搁噺鍩哄潃鏄浣曞缓绔嬬殑锛氭暟缁勬槧鍍忓嚱鏁板父閲忕殑鍩哄潃constants浣滀负涓涓寚閽堬紝鍦↖nitArray鍑芥暟涓綔涓烘暟缁勪娇鐢紝鎸囧悜姣忎竴涓猚onstants[i]銆俢onstants[dim-1]灏辨槸澶氱淮鏁扮粍涓渶鍚庝竴缁寸殑鍏冪礌鍔犱竴鎴...
  • c璇█鐗圭偣
    绛旓細3銆佹暟鎹粨鏋勪赴瀵 C鐨勬暟鎹被鍨嬫湁:鏁村瀷銆佸疄鍨嬨佸瓧绗﹀瀷銆鏁扮粍绫诲瀷銆佹寚閽堢被鍨嬨缁撴瀯浣绫诲瀷銆佸叡鐢ㄤ綋绫诲瀷绛夈傝兘鐢ㄦ潵瀹炵幇鍚勭澶嶆潅鐨勬暟鎹被鍨嬬殑杩愮畻銆傚苟寮曞叆浜嗘寚閽堟蹇,浣跨▼搴忔晥鐜囨洿楂樸傚彟澶C璇█鍏锋湁寮哄ぇ鐨勫浘褰㈠姛鑳, 鏀寔澶氱鏄剧ず鍣ㄥ拰椹卞姩鍣ㄣ備笖璁$畻鍔熻兘銆侀昏緫鍒ゆ柇鍔熻兘寮哄ぇ銆4銆丆鏄粨鏋勫紡璇█ 缁撴瀯寮忚瑷鐨勬樉钁...
  • C璇█鏄粈涔? 瑕佹庝箞缂 ? 鐢ㄤ粈涔堢紪?
    绛旓細鍥犳,瀹冪殑搴旂敤鑼冨洿骞挎硾銆侰璇█瀵规搷浣滅郴缁熷拰绯荤粺浣跨敤绋嬪簭浠ュ強闇瑕佸纭欢杩涜鎿嶄綔鐨勫満鍚,鐢–璇█鏄庢樉浼樹簬鍏跺畠瑙i噴鍨嬮珮绾ц瑷,鏈変竴浜涘ぇ鍨嬪簲鐢ㄨ蒋浠朵篃鏄敤C璇█缂栧啓鐨勩侰璇█鍏锋湁缁樺浘鑳藉姏寮,鍙Щ妞嶆,骞跺叿澶囧緢寮虹殑鏁版嵁澶勭悊鑳藉姏,鍥犳閫備簬缂栧啓绯荤粺杞欢,涓夌淮,浜岀淮鍥惧舰鍜屽姩鐢汇傚畠鏄暟鍊艰绠楃殑楂樼骇璇█銆傚父鐢鐨凜璇█IDE(闆嗘垚寮鍙...
  • C璇█鏈鏈鏈鍩虹鐨勭煡璇
    绛旓細C鐨勮繍绠楃鍖呭惈鐨勮寖鍥村緢骞挎硾锛屽叡鏈13绉34涓繍绠楃銆C璇█鎶婃嫭鍙枫佽祴鍊笺佸己鍒剁被鍨嬭浆鎹㈢瓑閮戒綔涓鸿繍绠楃澶勭悊銆備粠鑰屼娇C鐨勮繍绠楃被鍨嬫瀬鍏朵赴瀵岃〃杈惧紡绫诲瀷澶氭牱鍖栵紝鐏垫椿浣跨敤鍚勭杩愮畻绗﹀彲浠ュ疄鐜板湪鍏跺畠楂樼骇璇█涓毦浠ュ疄鐜扮殑杩愮畻銆3. 鏁版嵁缁撴瀯涓板瘜 C鐨勬暟鎹被鍨嬫湁锛氭暣鍨嬨佸疄鍨嬨佸瓧绗﹀瀷銆鏁扮粍绫诲瀷銆佹寚閽堢被鍨嬨缁撴瀯浣绫诲瀷銆...
  • c璇█鏄粈涔
    绛旓細瀹冨彲浠ヤ綔涓哄伐浣滅郴缁熻璁¤瑷锛岀紪鍐欑郴缁熷簲鐢ㄧ▼搴忥紝涔熷彲浠ヤ綔涓哄簲鐢ㄧ▼搴忚璁¤瑷锛岀紪鍐欎笉渚濊禆璁$畻鏈虹‖浠剁殑搴旂敤绋嬪簭銆傚洜姝わ紝瀹冪殑搴旂敤鑼冨洿骞挎硾锛屼笉浠呬粎鏄湪杞欢寮鍙戜笂锛岃屼笖鍚勭被绉戠爺閮介渶瑕佺敤鍒C璇█锛鍏蜂綋搴旂敤姣斿鍗曠墖鏈轰互鍙婂祵鍏ュ紡绯荤粺寮鍙戙傝瑷鐗圭偣:C鏄腑绾ц瑷/C鏄缁撴瀯寮忚瑷/C璇█鍔熻兘榻愬叏/C璇█閫傜敤鑼冨洿澶/绠娲...
  • C璇█鐨鐗圭偣鏈夊摢浜?
    绛旓細C璇█鏄竴涓湁缁撴瀯鍖栫▼搴忚璁°佸叿鏈夊彉閲忎綔鐢ㄥ煙浠ュ強閫掑綊鍔熻兘鐨勮繃绋嬪紡璇█銆侰璇█浼犻掑弬鏁板潎鏄互鍊间紶閫掞紝鍙﹀涔熷彲浠ヤ紶閫掓寚閽堛備笉鍚岀殑鍙橀噺绫诲瀷鍙互鐢缁撴瀯浣缁勫悎鍦ㄤ竴璧枫傚彧鏈32涓繚鐣欏瓧锛屼娇鍙橀噺銆佸嚱鏁板懡鍚嶆湁鏇村寮规с傞儴浠界殑鍙橀噺绫诲瀷鍙互杞崲锛屼緥濡傛暣鍨嬪拰瀛楃鍨嬪彉閲忋傞氳繃鎸囬拡锛孋璇█鍙互瀹规槗鐨勫瀛樺偍鍣ㄨ繘琛屼綆绾...
  • 扩展阅读:c语言struct结构体数组 ... 三维数组的表示法 ... 三维数组存储图解 ... 三维数组是什么意思 ... c语言如何使用结构体 ... 大一c语言必背编程题 ... c语言三维数组怎么用 ... 三维数组怎么定义 ... c语言三维数组怎么理解 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网