奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語(yǔ)言

C語(yǔ)言不定長(zhǎng)消息之柔性數(shù)組

時(shí)間:2024-09-05 16:57:25 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言不定長(zhǎng)消息之柔性數(shù)組

  導(dǎo)語(yǔ):C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。下面我們來(lái)看看C語(yǔ)言不定長(zhǎng)消息之柔性數(shù)組,希望對(duì)大家有所幫助。

  C語(yǔ)言不定長(zhǎng)消息之柔性數(shù)組:柔性數(shù)組:數(shù)組大小待定的數(shù)組。C語(yǔ)言中結(jié)構(gòu)體最后一個(gè)元素可以是大小未知的數(shù)組。C語(yǔ)言可以由結(jié)構(gòu)體產(chǎn)生柔性數(shù)組。

  柔性數(shù)組的結(jié)構(gòu)如何只能堆上生成,柔性數(shù)組是C99的擴(kuò)展,簡(jiǎn)而言之就是一個(gè)在struct結(jié)構(gòu)里的標(biāo)識(shí)占位符(不占結(jié)構(gòu)struct的空間)

  在游戲前后端交換的過(guò)程中,經(jīng)常會(huì)用到變成的消息體,因?yàn)橛械膬?nèi)容的大小是位置的,例如一條微博,微博的內(nèi)容大小是未知的。

  一般的做法是定義一個(gè)char*類(lèi)型的指針,然后指定其長(zhǎng)度,代碼如下:

1
2
3
4
typedef struct{          
   unsigned len;          
   char* pData;          
}Msg;          

  使用時(shí):

1
2
3
4
5
6
7
8
char str[] = "hello world!";          
unsigned len = sizeof(str);          
Msg* m = (Msg*)malloc(sizeof(Msg)+len*sizeof(char));          
m->len = len;          
m->pData = (char*)(m+1);          
memcpy(m+1, str, len);          
printf("%d, %s ", m->len, m->pData);          

  有沒(méi)有覺(jué)得時(shí)機(jī)上char* pData很多余呢?

  因?yàn)閿?shù)據(jù)時(shí)機(jī)的存儲(chǔ)位置在m+1,我們可以直接得到這個(gè)指針,而不需要重新定義一個(gè)char* pData來(lái)報(bào)錯(cuò)這個(gè)位置。

  這樣帶來(lái)了另一個(gè)問(wèn)題就是,訪(fǎng)問(wèn)不方便,我們不能用結(jié)構(gòu)體成員的方式來(lái)訪(fǎng)問(wèn)了,可以使用柔性數(shù)組,且看:

1
2
3
4
typedef struct{          
   unsigned len;          
   char data[];          
}Message;          

  使用起來(lái)就是這樣

1
2
3
4
5
Message* msg = (Message*)malloc(sizeof(Message) + len*sizeof(char));          
msg->len = len;          
memcpy(msg->data, str, len);          
printf("%d, %s ", msg->len, msg->data);          
free(msg);          

  來(lái)分完整代碼對(duì)比下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
typedef struct{          
   unsigned len;          
   char* pData;          
}Msg;          
typedef struct{          
   unsigned len;          
   char data[];          
}Message;          
// test for 0 size array          
#include <stdio.h>          
#include <stdlib.h>          
#include <string.h>          
#include "array0.h"          
int main()          
{          
   char str[] = "hello world!";          
   unsigned len = sizeof(str);          
   // 普通用法          
   Msg* m = (Msg*)malloc(sizeof(Msg)+len*sizeof(char));          
   m->len = len;          
   m->pData = (char*)(m+1);          
   memcpy(m+1, str, len);          
   printf("%d, %s ", m->len, m->pData);          
   free(m);          
   // 柔性數(shù)組          
   Message* msg = (Message*)malloc(sizeof(Message) + len*sizeof(char));          
   msg->len = len;          
   memcpy(msg->data, str, len);          
   printf("%d, %s ", msg->len, msg->data);          
   free(msg);          
   system("pause");          
   return 0;          
}</string.h></stdlib.h></stdio.h>          

  附自己測(cè)試代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>          
using namespace std;          
typedef struct{          
   unsigned len;          
   char* pData;          
}Msg;          
typedef struct{          
   unsigned len;          
   char pData[];          
}Msg1;          
int main(void)          
{          
   Msg m;          
   cout << sizeof(m) << endl; //16          
   cout << &m << endl;   // x          
   cout << &(m.len) << endl; //x          
   cout << &(m.pData) << endl;  //x+8          
   //          
   cout << "-----" << endl;          
   Msg1 m1;          
   cout << sizeof(m1) << endl; //4          
   cout << &m1 << endl;   // x          
   cout << &(m1.len) << endl; //x          
   cout << &(m1.pData) << endl;  //x+4          
   return 0;          
}</iostream>          

  結(jié)果

【C語(yǔ)言不定長(zhǎng)消息之柔性數(shù)組】相關(guān)文章:

什么是C語(yǔ)言數(shù)組10-03

C語(yǔ)言數(shù)組教程08-31

C語(yǔ)言數(shù)組方法08-06

C語(yǔ)言數(shù)組實(shí)例解析10-21

C語(yǔ)言數(shù)組的定義及引用08-05

C語(yǔ)言數(shù)組是什么08-25

C語(yǔ)言數(shù)組知識(shí)點(diǎn)10-14

C語(yǔ)言數(shù)組知識(shí)點(diǎn)07-15

如何使用C語(yǔ)言數(shù)組指針09-14

C語(yǔ)言中指針與數(shù)組的區(qū)別10-09

主站蜘蛛池模板: 宜昌市| 泰顺县| 龙州县| 宁明县| 扎鲁特旗| 邢台市| 获嘉县| 肃北| 胶南市| 临沧市| 专栏| 惠安县| 平昌县| 荔波县| 福贡县| 离岛区| 景宁| 新沂市| 进贤县| 祁阳县| 周口市| 罗甸县| 惠水县| 桂林市| 江津市| 新龙县| 云南省| 建始县| 吴堡县| 安西县| 平凉市| 普兰县| 庄浪县| 湘阴县| 涡阳县| 娱乐| 安龙县| 韶山市| 铜陵市| 旅游| 定日县|