柔性数组
在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;
}
Разрешение на строительство — это административный письменное удостоверение, выписываемый официальными ведомствами государственной власти или муниципального руководства, который позволяет начать стройку или исполнение строительных операций.
Разрешение на строительство здания назначает правовые основы и регламенты к стройке, включая приемлемые разновидности работ, дозволенные материалы и приемы, а также включает строительные стандарты и наборы защиты. Получение разрешения на строительный процесс является обязательным документов для строительной сферы.
Разрешение на строительство — это административный удостоверение, предоставленный управомоченными инстанциями государственного управления или местного управления, который допускает начать строительную деятельность или осуществление строительных операций.
Получение разрешения на строительство задает юридические основания и условия к строительным работам, включая допустимые разновидности работ, приемлемые материалы и способы, а также включает строительные стандарты и комплексы охраны. Получение разрешения на строительные операции является обязательным документов для строительной сферы.
http://indiapharmacy.cheap/# indian pharmacy
http://mexicanpharmacy.guru/# buying prescription drugs in mexico online
Разрешение на строительство — это административный запись, предоставляемый правомочными учреждениями государственного управления или территориального руководства, который дает возможность начать возведение или осуществление строительного процесса.
Получение рнс утверждает юридические принципы и условия к строительной деятельности, включая дозволенные разновидности работ, допустимые материалы и подходы, а также включает строительные инструкции и комплекты защиты. Получение разрешения на возведение является необходимым документов для строительной сферы.
canadian drug prices: canadian pharmacy checker – the canadian drugstore
buying from online mexican pharmacy: buying prescription drugs in mexico – п»їbest mexican online pharmacies
https://lisinopril.pro/# lisinopril 10mg tabs
http://avodart.pro/# can i purchase generic avodart tablets
https://ciprofloxacin.ink/# cipro
http://lipitor.pro/# lipitor australia
https://avodart.pro/# can i purchase cheap avodart pills
Разрешение на строительство — это публичный письменное удостоверение, выдаваемый правомочными инстанциями государственного управления или муниципального самоуправления, который допускает начать строительную деятельность или производство строительных работ.
Порядок получения разрешения на строительство формулирует нормативные основания и требования к стройке, включая разрешенные виды работ, разрешенные материалы и техники, а также включает строительные нормы и комплекты безопасности. Получение разрешения на строительные операции является обязательным документов для строительной сферы.
Разрешение на строительство — это государственный запись, предоставленный авторизованными ведомствами государственного аппарата или муниципального управления, который позволяет начать строительство или исполнение строительных операций.
Разрешение на место строительства задает юридические основания и нормы к строительству, включая допустимые виды работ, разрешенные материалы и техники, а также включает строительные регламенты и комплексы безопасности. Получение разрешения на строительные работы является обязательным документов для строительной сферы.
http://misoprostol.guru/# buy cytotec pills online cheap
Разрешение на строительство — это административный акт, выдаваемый официальными структурами государственного управления или территориального руководства, который допускает начать стройку или производство строительных операций.
Разрешение на начало строительства выдает предписывает правовые положения и нормы к стройке, включая допустимые типы работ, допустимые материалы и техники, а также включает строительные нормы и комплекты безопасности. Получение разрешения на строительную деятельность является необходимым документов для строительной сферы.
Разрешение на строительство — это публичный документ, предоставляемый авторизованными ведомствами государственного управления или местного руководства, который дает возможность начать строительство или осуществление строительного процесса.
Разрешение на строительство утверждает законодательные основы и требования к возведению, включая допустимые виды работ, дозволенные материалы и методы, а также включает строительные нормы и пакеты защиты. Получение разрешения на строительные операции является обязательным документов для строительной сферы.
https://avodart.pro/# how can i get cheap avodart
https://ciprofloxacin.ink/# ciprofloxacin generic
Разрешение на строительство — это административный письменное удостоверение, предоставляемый управомоченными ведомствами государственной власти или субъектного самоуправления, который допускает начать стройку или производство строительных операций.
Получение разрешения на строительство формулирует законодательные основы и нормы к строительным операциям, включая дозволенные виды работ, дозволенные материалы и приемы, а также включает строительные инструкции и наборы охраны. Получение разрешения на возведение является обязательным документов для строительной сферы.
Разрешение на строительство — это официальный письменное удостоверение, выписываемый авторизованными ведомствами государственного управления или территориального управления, который разрешает начать строительную деятельность или исполнение строительных операций.
Разрешение на начало строительства выдает предписывает законодательные основания и требования к строительному процессу, включая дозволенные типы работ, допустимые материалы и подходы, а также включает строительные инструкции и комплексы защиты. Получение разрешения на строительную деятельность является обязательным документов для строительной сферы.
Разрешение на строительство — это административный запись, предоставляемый уполномоченными структурами государственного аппарата или муниципального самоуправления, который дает возможность начать строительную деятельность или исполнение строительных операций.
Разрешение на начало строительства выдает назначает юридические положения и требования к строительству, включая предусмотренные категории работ, предусмотренные материалы и подходы, а также включает строительные стандарты и комплексы охраны. Получение разрешения на строительную деятельность является обязательным документов для строительной сферы.
http://lipitor.pro/# buy generic lipitor canada
http://avodart.pro/# where can i get avodart
https://misoprostol.guru/# Abortion pills online
http://misoprostol.guru/# Misoprostol 200 mg buy online
http://avodart.pro/# where buy avodart for sale
https://lipitor.pro/# canada prescription price lipitor
Разрешение на строительство — это публичный акт, выдаваемый уполномоченными учреждениями государственного управления или местного руководства, который разрешает начать строительство или производство строительных работ.
Разрешение на строительство назначает юридические принципы и стандарты к строительству, включая допустимые категории работ, допустимые материалы и методы, а также включает строительные нормативные акты и комплекты безопасности. Получение разрешения на строительную деятельность является обязательным документов для строительной сферы.
http://ciprofloxacin.ink/# ciprofloxacin generic price
https://lipitor.pro/# buy lipitor 40 mg
http://misoprostol.guru/# buy cytotec pills
Разрешение на строительство — это публичный удостоверение, предоставляемый официальными ведомствами государственного аппарата или территориального самоуправления, который предоставляет начать возведение или производство строительных операций.
Разрешение на строительство на существующий объект устанавливает законодательные основания и требования к строительству, включая допустимые разновидности работ, приемлемые материалы и подходы, а также включает строительные нормы и комплекты защиты. Получение разрешения на строительный процесс является необходимым документов для строительной сферы.
https://avodart.pro/# can i get cheap avodart tablets
paxlovid generic: Paxlovid buy online – paxlovid price
paxlovid pharmacy: paxlovid generic – paxlovid pharmacy
https://antibiotic.guru/# buy antibiotics from canada
https://ed-pills.men/# mens ed pills
https://antibiotic.guru/# cheapest antibiotics
cheap ed drugs: cheapest ed pills – how to cure ed
https://paxlovid.top/# paxlovid price
top erection pills: cheap ed pills – compare ed drugs
new ed pills: cheap erectile dysfunction pill – ed pills that really work
https://stromectolonline.pro/# ivermectin australia
http://azithromycin.men/# can you buy zithromax over the counter in canada
zithromax online usa no prescription: zithromax 250 mg – where can i get zithromax
zithromax 1000 mg online: where can i get zithromax – generic zithromax online paypal
http://gabapentin.pro/# purchase neurontin
http://stromectolonline.pro/# where to buy ivermectin
order neurontin neurontin tablets 100mg neurontin 50mg tablets