柔性数组
在C99标准之后,在结构体中最后一个元素允许是未知大小的,称之为柔性数组
- 一般定义为:
- 类型 变量名[]
- 注意:
- 结构体中,柔性数组前必须有变量
- 柔性数组必须定义在结构体的最后
- 示例:
struct CoolArr_s{
int len;
char arr[];
};
- -
- 如果编译器报错,则考虑把最后的 char arr[] 尝试替换为一下几种写法:
- char arr[0]
- char arr[1] (非常不推荐,如果这样声明后使用时会被认为是越界行为)
- 如果编译器报错,则考虑把最后的 char arr[] 尝试替换为一下几种写法:
- 使用 malloc(sizeof(int) + sizeof(char) * 长度) 申请内存空间
- 示例:
#include "stdio.h"
#include "stdlib.h"
struct CoolArr_s
{
int len;
char arr[];
};
int main()
{
//这里给arr的长度为10个char的大小
struct CoolArr_s* p = (struct CoolArr_s*)malloc(sizeof(int) + sizeof(char) * 10);
for (int i = 10; i--;)
{
(p->arr)[i] = i + '0';
printf("%d " ,(p->arr)[i]);
}
printf("\n CoolArr_s: %d, *p: %d\n", sizeof(struct CoolArr_s), sizeof(*p));
return 0;
}
- 运行结果:
- 那么这和直接把它定义为指针有什么区别呢?或者说它有什么好处呢?
- 首先从上面的例子的运行结果可见,结构体 CoolArr_s 的大小就是 int len 的大小。也就是说,柔性数组 char arr[] 并不会占一个指针的大小。数组名 arr 是一个常量地址,这个地址是紧接着 int len 的后面的地址。(数组名和指针是不同的)
- 其次就是柔性数组的内存空间是和结构体连续的,而声明为指针时,其指向的数组内存空间和结构体极大概率不是连续的。这一点在给一些函数传值时是非常重要的区别,比如 linux中的消息队列 相关的函数。
在C++中的柔性数组
注意:在c++中并不建议使用柔性数组,而应考虑使用array代替。即使它可以使用在struct和class中,但部分编译器是不支持这种操作的。
- 截止至2022(C++20标准):
- 在g++中是可以使用柔性数组的
- 在VS2022的MSVC中使用柔性数组,虽然可以运行,但会有警告:
- warning C4200: 使用了非标准扩展: 结构/联合中的零大小数组
- warning C6011: 取消对 NULL 指针 “xxx” 的引用
- 所以在c++中应考虑使用array容器代替。
- 示例(使用array容器代替上面的例子):
#include <iostream>
#include <array>
using namespace std;
int main()
{
//数组长度
const int len_arr = 10;
//定义数组
array<int, len_arr> arr;
//array::data()返回数组的首地址
//array::begin()返回的是迭代器iterator
int *arr_p = arr.data();
for (int i = len_arr; i--;)
{
arr_p[i] = i;
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Привет, друзья!
Сколько стоит диплом высшего и среднего образования и как его получить?
ya.2bb.ru/viewtopic.php?id=19602#p241124
Всегда вам поможем!
It’s nearly impossible to find educated people on this subject, however, you seem like you know what you’re talking about! Thanks
buy online doxycycline: doxycycline purchase – doxycycline hyclate 100 mg capsules
http://clomiddelivery.pro/# can i buy cheap clomid no prescription
можно ли купить медицинский диплом diploms-x.com .
http://amoxildelivery.pro/# buy amoxicillin over the counter uk
https://locowin-casino.site/
Привет, друзья!
Мы можем предложить документы ВУЗов, расположенных в любом регионе РФ. Можно купить диплом за любой год, указав необходимую специальность и оценки за все дисциплины. Документы печатаются на бумаге высшего качества. Это позволяет делать государственные дипломы, не отличимые от оригинала. Они будут заверены всеми обязательными печатями и подписями.
hvacprotalk.com/read-blog/219
Добрый день!
Мы изготавливаем дипломы любой профессии по выгодным тарифам.
http://www.cetprocapci.com/inicio/uncategorized/купить-диплом-кассира/
Добрый день!
Купить диплом старого образца, можно ли это сделать по быстрой схеме?
artem-energo.ru/message.php?msg=151
Всегда вам поможем!
Здравствуйте!
Диплом вуза купить официально с упрощенным обучением в Москве
bogatbeden.listbb.ru/viewtopic.php?f=3&t=437
Будем рады вам помочь!
paxlovid generic: paxlovid price – paxlovid pill
газоблок москва https://gazobeton-moskow.ru/
лучшая коллекция порно лучшая коллекция порно .
https://amoxildelivery.pro/# amoxil generic
Привет, друзья!
Купить диплом любого университета.
trum.flybb.ru/viewtopic.php?f=15&t=4688&sid=87dec77769dda0a19b59f24b871611b0
Привет, друзья!
Приобрести диплом о высшем образовании.
bahchisaray.org.ua/index.php?showtopic=33568
https://amoxildelivery.pro/# amoxicillin 800 mg price
Добрый день!
Приобрести диплом любого университета.
livestockkenya.com/index.php/cb-profile/pluginclass/cbblogs?action=blogs&func=show&id=244
Вид-Строй http://www.internet-magazin-strojmaterialov.ru/ .
Привет, друзья!
Покупка диплома о среднем полном образовании: как избежать мошенничества?
ud-kultura.ru/index.php?subaction=userinfo&user=afywiryr
Рады оказаться полезными!.
Добрый день!
Покупка школьного аттестата с упрощенной программой: что важно знать
http://www.liveinternet.ru/users/avimnfnhtf/post505853562//
Рады оказать помощь!.
скачать порно коллекций https://www.porn-library.ru .
онлайн порно видео онлайн порно видео .
where can i get generic clomid without insurance: can i get clomid no prescription – how to buy clomid without a prescription
Здравствуйте!
Заказать документ о получении высшего образования можно в нашей компании в Москве.
ast-diplom.com/kupit-diplom-novosibirsk
Convenience: Play from the comfort of your home or on the go.
ivermectin purchase
can you buy generic clomid pills: can i purchase clomid tablets – how to buy generic clomid no prescription
http://paxloviddelivery.pro/# Paxlovid over the counter
новые порно видео http://www.apteka-porno.ru/ .
can i buy amoxicillin online: amoxicillin tablet 500mg – amoxicillin from canada
смотреть порно коллекции смотреть порно коллекции .
Добрый день!
Купить документ ВУЗа вы сможете у нас.
diplomasx.com/kupit-diplom-omsk
Удачи!
порно коллекции бесплатно https://porn-library.ru .
коллекции порно онлайн porn-library.ru .
интернет магазин стройматериалов интернет магазин стройматериалов .
смотреть порно видео смотреть порно видео .
порно видео онлайн порно видео онлайн .
Привет, друзья!
Можно ли купить аттестат о среднем образовании? Основные рекомендации
bdfeu.ukraine7.com/t19982-topic#36429
Поможем вам всегда!
порно видео ролики порно видео ролики .
investnews24.net
Привет, друзья!
Заказать диплом любого университета.
web.nioch.nsc.ru/medchemschool2020/index.php/cb-profile/pluginclass/cbblogs?action=blogs&func=show&id=146
Добрый день!
Купить диплом ВУЗа.
licomklicu.ru/read-blog/885
219news.com
Привет!
Мы можем предложить дипломы любой профессии по доступным ценам.
http://www.industrialagency.org/blogs/69281/Дипломы-для-Успешной-Карьеры
Full list of CS:GO/CS2 https://wiki.vpesports.com skins, detail descriptions
https://paxloviddelivery.pro/# Paxlovid buy online
Привет, друзья!
Мы предлагаем дипломы любых профессий по приятным ценам.
9unity.com/read-blog/2356_nadezhnyj-onlajn-magazin-s-bolshim-assortimentom-diplomov.html?mode=night
amoxicillin 500mg capsule cost: over the counter amoxicillin canada – amoxicillin 500 mg where to buy
порно видео онлайн порно видео онлайн .