Что-то вроде этого?
$object = New-Object PSObject
Add-Member -InputObject $object -MemberType NoteProperty -Name TableName -Value "MyTable"
Add-Member -InputObject $object -MemberType NoteProperty -Name Description -Value "Lorem ipsum dolor.."
Add-Member -InputObject $object -MemberType NoteProperty -Name AppArea -Value "UserMgmt"
Add-Member -InputObject $object -MemberType NoteProperty -Name InitialVersionCode -Value ""
# Iterate over objects
$object | ForEach-Object {
# Get array of names of object properties that can be cast to boolean TRUE
# PSObject.Properties - https://msdn.microsoft.com/en-us/library/system.management.automation.psobject.properties.aspx
$NonEmptyProperties = $_.psobject.Properties | Where-Object {$_.Value} | Select-Object -ExpandProperty Name
# Convert object to JSON with only non-empty properties
$_ | Select-Object -Property $NonEmptyProperties | ConvertTo-Json
}
Результат:
{
"TableName": "MyTable",
"Description": "Lorem ipsum dolor..",
"AppArea": "UserMgmt"
}
Массивы реализованы как смежное расположение памяти в памяти. Когда вы пишете что-то вроде
int arr[] = {1, 2, 3};
int *p = arr
, тогда здесь arr
является всего лишь указателем базового типа int
, указывающим на первый элемент в массиве, а оператор []
просто помогает в его приращении
, например
arr[2]; // same as *(arr+2)
p[2]; // same as *(p+2) i.e. arr[2]
Как сказал @melpomene, ваш вопрос не совсем корректен. Указатель на массив подразумевает что-то вроде
int (*p)[3] = &arr;
Здесь указатель имеет базовый тип int [3]
, поэтому, когда вы увеличиваете (p++
), тогда p будет увеличиваться на 3 int
.
Указатели на массивы более заметны в случае многомерных массивов
Посылка неверна. Если вы не используете &
, вы не получите указатель на массив; вы получаете указатель на первый элемент массива.
То есть:
int arr[] = { 1, 2, 3, 4 };
int *p1 = arr;
int *p2 = &arr[0];
int (*p3)[4] = &arr;
p1
и p2
эквивалентны. Оба они указывают на первый элемент массива, arr[0]
.
p3
является указателем на весь массив, и ему действительно нужно &
.