При назначении указателя на адрес памяти массива, почему бы вам не использовать оператор адреса?

Что-то вроде этого?

$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"
}
-1
задан melpomene 14 July 2018 в 01:54
поделиться

2 ответа

Массивы реализованы как смежное расположение памяти в памяти. Когда вы пишете что-то вроде

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.

Указатели на массивы более заметны в случае многомерных массивов

0
ответ дан Gaurav Pant 17 August 2018 в 12:03
поделиться

Посылка неверна. Если вы не используете &, вы не получите указатель на массив; вы получаете указатель на первый элемент массива.

То есть:

int arr[] = { 1, 2, 3, 4 };

int *p1 = arr;
int *p2 = &arr[0];

int (*p3)[4] = &arr;

p1 и p2 эквивалентны. Оба они указывают на первый элемент массива, arr[0].

p3 является указателем на весь массив, и ему действительно нужно &.

2
ответ дан melpomene 17 August 2018 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: