Длина массива си: Как определить размер моего массива в C?

Содержание

Array.length — JavaScript | MDN

Свойство length объекта, который является экземпляром типа Array , устанавливает или возвращает число элементов этого массива. Значение данного свойства 32-битное безнаковое целое число, которое всегда численно больше чем самый наибольший индекс в массиве.

var items = ['shoes', 'shirts', 'socks', 'sweaters'];
items.length;

Свойство length является целым числом с положительным знаком и значением, меньшим чем 2 в степени 32 (232).

var namelistA = new Array(4294967296); 
var namelistC = new Array(-100) 

console.log(namelistA.length); 
console.log(namelistC.length); 



var namelistB = [];
namelistB.length = Math.pow(2,32)-1; 
console.log(namelistB.length);


В любой момент вы можете установить свойство length для обрезки массива. Когда вы расширяете массив, изменяя его свойство length, реальное количество элементов в массиве увеличивается; например, если вы установите свойство

length в 3, когда оно равно 2, массив будет из 3 элементов, где значение третьего элемента будет равно undefined .

var arr = [1, 2, 3];
printEntries(arr);

arr.length = 5; 
printEntries(arr);

function printEntries(arr) {
  var goNext = true;
  var entries = arr.entries();
  while (goNext) {
    var result = entries.next();
    if (result.done !== true) {
      console.log(result.value[1]);
      goNext = true;
    } else
      goNext = false;
  }
  console.log('=== printed ===');
}










Таким образом, свойство length ничего не говорит о количестве определённых значений в массиве. Также смотрите раздел Взаимосвязь свойства length с числовыми свойствами.

Записываемоеда
Перечисляемоенет
Настраиваемое
нет

Пример: итерирование по массиву

В следующем примере массив numbers итерируется до значения свойства length, показывающего, сколько элементов содержит массив. Значение каждого элемента удваивается.

var numbers = [1, 2, 3, 4, 5];

for (var i = 0; i < numbers.length; i++) {
  numbers[i] *= 2;
}

Пример: сокращение массива

Следующий пример сокращает массив statesUS до длины в 50 элементов, если текущая длина массива больше 50.

if (statesUS.length > 50) {
  statesUS.length = 50;
}

BCD tables only load in the browser

Одномерные массивы

Данные одинакового типа удобно хранить и обрабатывать с использованием массива.
Массив — это непрерывный участок памяти, в котором содержатся элементы одного типа. Массив имеет идентификатор (имя массива), который используется для обращения к отдельным его элементам.
Каждый элемент массива хранится в отдельной ячейке (или ячейках) памяти и имеет свой
индекс
(порядковый номер в составе массива) и значение.
Все массивы можно условно разделить на
  • одномерные массивы;
  • многомерные массивы;
  • массивы массивов.
В данной статье речь пойдет об одномерных массивах.

Для использования массива его необходимо объявить и выделить память для хранения его элементов. Для объявления одномерного массива используется следующий синтаксис:


В этой строке тип указывает на тип элементов, которые будут храниться в массиве. Имя предполагает ячейку, в которой будет храниться ссылка (адрес) участка памяти, в котором и будут размещаться элементы массива. Но на текущий момент сам участок памяти для хранения элементов массива еще не выделен.
Для его выделения используется операция new без инициализации или с инициализацией:

имя new тип[количество];
имя new тип[] {выражение1, выражение2, выражениеn};


Результатом выполнения операции new является ссылка на выделенный участок памяти для хранения массива.
При выделении памяти всем элементам массива присваивается значение по умолчанию (для базовых типов данных это значение равно 0).
Объявление массива и выделение памяти для хранения его элементов можно осуществить в одной строке. Например,
После того как объявлен массив и выделена память для хранения его элементов, можно обратиться к элементам массива с использованием соответствующего индекса:
Начальный элемент массива всегда имеет индекс 0, последний элемент имеет индекс КоличествоЭлементов-1. То есть если массив содержит 5 элементов, то эти элементы имеют индексы 0, 1, 2, 3, 4.

Создание массива

В качестве примера рассмотрим задачу найти максимальный элемент массива, состоящего из n элементов.
Сначала введем количество элементов, которые будут храниться в массиве, затем последовательно в цикле введем сами элементы. Для поиска максимального элемента можно воспользоваться параметрическим циклом.
Результат выполнения программы представлен на рисунке.
Поиск максимума можно осуществить с использованием цикла перебора элементов foreach.
Все массивы в C# являются наследниками класса System.Array, который, в свою очередь, наследует класс System.Object. Поэтому все массивы обладают рядом свойств и методов, присущих классу Array.
Среди свойств класса Array наиболее популярным является свойство Length, возвращающее количество элементов в массиве.
Кроме того, класс Array содержит ряд методов для работы с массивами, некоторые из которых будут рассмотрены ниже.

Запись и считывание элементов массива

Для обращения к элементам массива можно воспользоваться обращением к элементу по его индексу, как это было показано в предыдущем примере. Но класс Array также поддерживает методы для считывания и установки значений элементов массива:
  • SetValue(значение, индекс) — для записи значения в элемент массива;
  • GetValue(индекс) — для считывания значения из элемента массива. Функция возвращает объект типа Object, для дальнейшего использования которого необходимо явное приведение его к типу элементов массива.
Пример использования этих методов, а также свойства Length, для нахождения максимума в массиве

Для установки диапазона элементов массива в значение по умолчанию можно использовать статический метод класса Array — Clear(), в качестве аргументов которому передаются ссылка на массив, начальный элемент, с которого необходимо осуществить сброс элементов к начальным значениям и длина диапазона (количество таких элементов.
Пример использования метода Clear() для обнуления диапазона элементов.
Результат работы программы:

Копирование массива

Для копирования массивов можно использовать один из двух методов класса Array – Clone() и CopyTo(). Оба метода создают поверхностную копию массива, то есть копируют элементы из одного массива в другой массив. При этом если элементы массива являются ссылками, то копируются сами значения этих ссылок, а сам объект, на который они ссылаются, остается единственным.
Кардинальное отличие методов Clone() и CopyTo() заключается в том, что метод Clone() самостоятельно выделяет память под вновь создаваемый массив и заполняет ее копиями элементов, а метод CopyTo() предусматривает, что память должна быть предварительно выделена под заполняемый этим методом массив в достаточном объеме.

Метод Clone() возвращает объект класса Object, который необходимо явно привести к ссылке на массив указанного типа.
Рассмотрим пример копирования массива с помощью функции Clone():


Пример использования метода CopyTo() для копирования массива. В качестве аргументов методу CopyTo() передаются ссылка на массив, куда будут копироваться элементы и индекс начального элемента для копирования.

Кроме того, для копирования массива можно использовать статические методы класса Array:
  • Copy(), в качестве аргументов которого передаются ссылка на копируемый массив, ссылка на массив-приемник (память для хранения элементов этого массива предварительно должна быть выделена в достаточном количестве) и количество копируемых элементов. Возможна также перегрузка данного метода с указанием начального индекса массива-источника и массива-приемника.
  • ConstrainedCopy() — метод, имеющий единственный вариант вызова, и в качестве аргументов ему передаются
    • ссылка на копируемый массив,
    • индекс элемента, с которого начинается копирование
    • ссылка на массив-приемник
    • индекс элемента, на место которого начинается копирование
    • количество копируемых элементов.
    Метод гарантирует, что при невозможности скопировать весь диапазон значений все изменения будут отменены.

Рассмотрим пример, копирования массива с использованием метода Copy():

Использование метода ConstrainedCopy() для копирования массива:

Изменение размеров массива

При выделении памяти под элементы массива, выделенный участок памяти может хранить фиксированное число элементов. Если размер массива необходимо увеличить или уменьшить, то необходимо сначала создать новый массив, потом скопировать в него значения требуемых элементов текущего массива, после чего освободить память, выделенную под старый массив.
С этой целью может использоваться статический метод Resize() класса Array, который в качестве аргументов принимает ссылку на массив и новое количество его элементов. Если количество элементов необходимо уменьшить, то последние элементы массива не будут сохранены. Если количество элементов необходимо увеличить, то вновь созданные элементы заполнятся значениями по умолчанию.

Сортировка, поиск и переворот массива

Для сортировки массива используется статический метод Sort() класса Array, в качестве аргумента которому передается ссылка на сортируемый массив. Выбор метода сортировки осуществляется в зависимости от длины сортируемого массива.
Для поиска значения элемента в отсортированном массиве может использоваться статический метод BinarySearch() класса Array, которому в качестве аргументов передаются ссылка на массив и искомое значение. Метод возвращает индекс элемента в массиве с заданным значением. Если элемент в массиве не найден, возвращается отрицательное значение. Если массив содержит несколько искомых элементов, возвращается индекс одного из них.
Для поиска элемента в неотсортированном массиве по значению также можно воспользоваться статическими методами IndexOf() и LastIndexOf() класса Array, в качестве аргументов которым передаются ссылка на массив и искомое значение. Возвращаемое значение функций — индекс первого и последнего элементов соответственно в массиве, равных искомому. Если элемент с искомым значением в массиве не найден, возвращается отрицательное значение индекса.
Класс Array содержит метод Reverse(), предназначенный для изменения порядка следования всех элементов массива на противоположный.
Ниже приведен пример использования перечисленных методов.

Результат выполнения программы представлен на рисунке.

Автор: Вставская Елена Владимировна

 
Написать комментарий:

Особенности работы со строками. Урок 14 курса «Основы языка C»

Неформатированные ввод из стандартного потока и вывод в стандартный поток

С помощью функции printf() можно легко вывести на экран строку, содержащую пробелы:

printf("%s", "Hello world");

С другой стороны, ввести строку произвольной длины, содержащую пробелы в неизвестных местах, исключительно с помощью функции scanf() невозможно. Для scanf() любой символ пустого пространства является сигналом завершения ввода очередных данных, если только не производится считывание символа.

На помощь может прийти функция getchar(), осуществляющая посимвольный ввод данных:

int i;
char str[20];
 
for (i=0; (str[i]=getchar())!='\n'; i++);
str[i] = '\0';
 
printf("\n%s\n", str);

В заголовке цикла getchar() возвращает символ, далее записываемый в очередную ячейку массива. После этого элемент массива сравнивается с символом ‘\n’. Если они равны, то цикл завершается. После цикла символ ‘\n’ в массиве «затирается» символом ‘\0’. В условии цикла должна быть также предусмотрена проверка на выход за пределы массива; чтобы не усложнять пример, опущена.

Однако в языке программирования C работать со строками можно проще. С помощью функций стандартной библиотеки gets() и puts() получают строку из стандартного потока и выводят в стандартный поток. Буква s в конце слов gets и puts является сокращением от слова string (строка).

В качестве параметров обе функции принимают указатель на массив символов (либо имя массива, либо указатель).

Функция gets() помещает полученные с ввода символы в указанный в качестве аргумента массив. При этом символ перехода на новую строку, который завершает ее работу, игнорируется.
Функция puts() выводит строку на экран и при этом сама добавляет символ перехода на новую строку. Простейший пример использования этих функций выглядит так:

char str[20];
 
gets(str);
puts(str);

Итак, если вы работаете со строками, а не другими типами данных, при этом нет необходимости выполнять их посимвольную обработку, то удобнее пользоваться функциями puts() и gets(). (Однако функция gets() считается опасной и была выпилена из версии языка C11.)

Массив символов и указатель на строку

Как мы знаем, строка представляет собой массив символов, последний элемент которого является нулевым символом по таблице ASCII, обозначаемым ‘\0’. При работе со строками также как с численными массивами можно использовать указатели. Мы можем объявить в программе массив символов, записать туда строку, потом присвоить указателю адрес на первый или любой другой элемент этого массива и работать со строкой через указатель:

char name[30];
char *nP;
 
printf("Введите имя и фамилию: ");
gets(name);
 
printf("Имя: ");
for(nP = name; *nP != ' '; nP++)
    putchar(*nP);
 
printf("\nФамилия: ");
puts(nP+1);

В заголовке цикла указателю сначала присваивается адрес первого элемента массива, его значение увеличивается до тех пор, пока не встретится пробел. В итоге указатель указывает на пробел и мы можем получить с его помощью вторую часть строки.

Иногда в программах можно видеть такое объявление и определение переменной-указателя:

char *strP = "Hello World!";

Строку, которая была присвоена не массиву, а указателю, также можно получить, обратившись по указателю:

puts(strP);

Но давайте посмотрим, что же все-таки происходит, и чем такая строка, присвоенная указателю, отличается от строки, присвоенной массиву.

Когда в программе определяются данные и объявляются переменные, то под них отводится память. При этом данные, которые не были присвоены переменным, поменять в процессе выполнения программы уже нельзя.

Что происходит в примере? В программе вводится строковый объект, который по сути является строковой константой (литералом). Ссылка на первый элемент этой строки присваивается указателю. Мы можем менять значение указателя сколько угодно, переходить к любому из элементов константного массива символов или даже начать ссылаться на совершенно другую строку. Но вот поменять значение элементов строки не можем. Это можно доказать таким кодом:

char *strP;
 
// работает, но строку нельзя изменить
strP = "This is a literal";  
 
puts(strP); 
printf("%c\n",strP[3]);
strP[3] = 'z'; // не получится

В последней строке кода возникнет ошибка, т.к. совершается попытка изменить строку-константу.

Тем более нельзя делать так:

char *strP;
 
// ошибка сегментирования
scanf("%s",strP); 

В данном случае память не была выделена под массив символов, который мы пытаемся считать функцией scanf(); память была выделена только под указатель. Поэтому записать строку просто некуда. Другое дело, если память была выделена с помощью объявления массива, после чего указателю был присвоен адрес на этот массив:

char str[12];
char *strP; 
strP = str; 
 
// память резервируется под массив ранее  
gets(strP); 
 
puts(strP);

Поэтому если вам требуется в программе неизменяемый массив символов, то можете определить его через указатель.

Передача строки в функцию

Передача строки в функцию ничем не отличается от передачи туда массива чисел:

void change (char *s) {
    for (;*s != '\0'; s++)
        (*s)++;
}

В этом примере функция change() принимает в качестве параметра указатель на символ. В теле функции значение указателя инкрементируется, указывая на следующий символ массива. В теле цикла инкрементируется значение, которое находится по адресу, который содержит указатель.

Объявите в программе три массива символов. Данные для двух из них получите с помощью вызовов функции gets(). Третий массив должен содержать результат конкатенации (соединения) двух введенных строк. Напишите функцию, которая выполняет конкатенацию строк.

Массив строк и массив указателей

Рассмотрим более сложный пример. Допустим, у нас есть набор строк. Требуется выполнить сортировку строк по возрастанию по признаку длины: сначала вывести самые короткие строки, затем более длинные.

Набор строк можно представить как двумерный массив, т.е. массив, состоящий из одномерных массивов, где каждый одномерный массив — это строка символов:

char str[][10] = {"Hello", "World", 
                  "!!!", "&&&"};

Представьте себе, что значит выполнить сортировку строк. Это значит, надо поменять местами содержимое множества ячеек памяти. Это достаточно трудоемкая для компьютера работа, особенно если строк очень много. Однако можно поступить по-иному. Достаточно создать массив указателей, каждый элемент которого будет указывать на соответствующую ему строку первого массива. Далее выполнить сортировку указателей, что несомненно быстрее. Конечно, сам массив строк отсортирован не будет, однако благодаря указателям у нас будет хранится отсортированный «срез» массива:

#include <stdio.h>
#include <string.h>
 
#define N 6
 
void sortlen(char *s[]);
 
int main() {
    char strings[N][30];
    char *strP[N];
    int i;
 
    for(i=0; i<N; i++) {
        gets(strings[i]);
        strP[i] = &strings[i][0];
    }
    printf("\n");
 
    sortlen(strP);
 
    for(i=0; i<N; i++) {
        printf("%s\n",strP[i]);
    }
 
}
 
// **s == *s[] - массив указателей
void sortlen(char **s) { 
    int i, j;
    char *str;
 
    for (i=0; i<N-1; i++)
        for (j=0; j < N-i-1; j++)
          if (strlen(s[j])>strlen(s[j+1])){
              str = s[j];
              s[j] = s[j+1];
              s[j+1] = str;
          }             
}

Примечания к программе:

  • На самом деле параметром функции sortlen() является указатель на указатель. Хотя для понимания проще сказать, что параметром является массив указателей на символы. Мы передаем в функцию указатель на первый элемент массива strP, который сам является указателем. Если бы в функции мы инкрементировали переменную s, то переходили бы к следующему элементу-указателю массива strP.
  • Сортировка выполняется методом пузырька: если длина строки, на которую ссылается следующий указатель массива strP, меньше длины строки под текущим указателем, то значения указателей меняются.
  • Выражение strP[i] = &strings[i][0] означает, что элементу массива указателей присваивается ссылка на первый символ каждой строки.

Напишите программу, которая сортирует строки по алфавиту. Для упрощения задачи пусть сортировка выполняется только по первым буквам строк (если первые буквы слов одинаковы, то вторые и последующие символы проверять не надо).

Курс с решением части задач:
android-приложение, pdf-версия

Массивы в памяти компьютера — PHP: Массивы

Работая на таких высокоуровневых языках как PHP, позволительно не знать устройство массивов для решения повседневных задач. С другой стороны, подобное понимание делает код менее магическим и даёт возможность заглядывать чуть дальше.

Массивы в си

Реальные массивы лучше всего рассматривать на языке , который, с одной стороны, достаточно простой и понятный, с другой — очень близок к железу и не скрывает от нас практически ничего. Когда мы говорим про примитивные типы данных, такие как «строка» или «число», то на интуитивном уровне все довольно понятно. Под каждое значение выделяется некоторый размер памяти (в соответствии с типом), в которой и хранится само значение. А как должна выделиться память под хранение массива? И что такое массив в памяти? На уровне хранения, понятия массив не существует. Массив представляется цельным куском памяти, размер которого вычисляется по следующей формуле: количество элементов * количество памяти под каждый элемент. Из этого утверждения есть два интересных вывода:

  • Размер массива — фиксированная величина. Те динамические массивы, с которыми мы имеем дело во многих языках, реализованы уже внутри языка, а не на уровне железа.
  • Все элементы массива имеют один тип и занимают одно и то же количество памяти. Благодаря этому появляется возможность простым умножением (по формуле, описанной выше) получить адрес той ячейки, в которой лежит нужный нам элемент. Именно это происходит под капотом, при обращении к элементу массива под определённым индексом.

Фактически, индекс в массиве — смещение относительно начала куска памяти, содержащего данные массива. Адрес, по которому расположен элемент под конкретным индексом, рассчитывается так: начальный адрес + индекс * количество памяти, занимаемое одним элементом (для данного типа данных). Начальный адрес, это адрес ячейки памяти, начиная с которой размещается массив. Он формируется во время выделения памяти под массив.

Пример на Си:

// Инициализация массива из пяти элементов типа int
// В этом месте резервируется память под него
// Непрерывный кусок памяти размером _количество элементов * количество байт под int_
int mark[] = {19, 10, 8, 17, 9};
// _Начальный адрес + 3 * количество байт под int_
// Так рассчитывается фактический адрес, по которому располагаются данные
mark[3]; // 17

Если предположить, что тип int занимает в памяти 2 байта (зависит от архитектуры), то адрес элемента, соответствующего индексу 3, вычисляется так: начальный адрес + 3 * 2. Для индекса 1начальный адрес + 1 * 2.

В такой формуле расчета адреса, есть ровно один способ физически разместить данные в начале доступной памяти – использовать нулевой индекс: начальный адрес + 0 * размер элемента конкретного типа = начальный адрес.

// Первый элемент
// Начальный адрес + 2 * 0 = начальный адрес
mark[0]; // 19

// Начальный адрес + 2 * 1 = начальный адрес + 2
// То есть сместились на 2 байта
mark[1]; // 10

// Начальный адрес + 2 * 2 = начальный адрес + 4
// То есть сместились на 4 байта
mark[2]; // 8

// Последний элемент
// Начальный адрес + 2 * 4 = начальный адрес + 8
// То есть сместились на 8 байт
// И сам элемент занимает 2 байта. В сумме как раз 10
mark[4]; // 9

Теперь должно быть понятно, почему индексы в массиве начинаются с нуля. 0 — означает отсутствие смещения.

Но не все данные имеют одинаковый размер. Как будет храниться массив строк? Строки ведь имеют разную длину, а значит требуют разное количество памяти для своего хранения. Один из способов сохранить строки в массиве на языке Си – создать массив массивов (тут нужно понимать, что любая строка в Си это массив символов). Вложенные массивы обязательно должны быть одного размера, невозможно обойти физические ограничения массивов. Хитрость в том, что этот размер должен быть достаточно большой, чтобы туда поместились необходимые строки.

// Массив из трех элементов, внутри которого массивы по 10 элементов
// Это значит, что здесь можно хранить 3 строки длиной не больше 10 символов
char strings[3][10] = {
   "spike",
   "tom",
   "jerry"
};

strings[0]; // spike

Безопасность

В отличие от высокоуровневых языков, в которых код защищён от выхода за границу массива, в таком языке как Си, выход за границу не приводит к ошибкам. Обращение к элементу, индекс которого находится за пределами массива, вернёт данные, которые лежат в той самой области памяти, куда его попросили обратиться (в соответствии с формулой выше). Чем они окажутся — никому не известно (но они будут проинтерпретированы в соответствии с типом массива. Если массив имеет тип int, то вернётся число). Благодаря отсутствию какой-либо защиты, выход за границу массива активно эксплуатируется хакерами для взлома программ.

Массивы в динамических языках

В динамических языках, таких как PHP или JS, устройство массивов значительно сложнее чем в си. Так как типы данных вычисляются автоматически во время выполнения кода. Массив в такой среде не может работать как в си. Неизвестно, данные каких типов окажутся внутри в процессе работы.

Массивы в таких языках содержат не сами данные, а ссылки (адреса в памяти) на них. Тогда становится не важно, что хранить. Любое значение в массиве – адрес, имеющий одинаковый размер независимо от данных, на которые он указывает. Такой подход делает массивы гибкими, но с другой стороны, более медленными.

Как проверить «длину массива» на языке ассемблера (ASM),

Лучший способ ответить на этот вопрос — использовать примеры C. В C есть два способа отслеживать длину массива:

  1. Вы сохраняете переменную, сообщающую вам, как долго вы создали массив.
  2. Вы делаете то же самое, что и строки, и последний элемент имеет значение 0. Затем вы можете реализовать функцию длины «строки», которая перебирает массив до тех пор, пока не найдет ноль.

Для первого примера, в зависимости от того, какой ассемблер вы используете, вы можете использовать некоторые приемы.Например, в nasm можно так:

  РАЗДЕЛ. Данные

msg: db "Hello World", 10,0; строка с завершающим нулем.
len: equ $ -msg; «$» означает текущий адрес.
  

Как видите, мы используем оператор equ , чтобы получить nasm для вычисления разницы между текущим адресом и началом msg , которая должна быть равна его длине. В качестве альтернативы вы можете просто записать длину в виде цифры.

Для второго случая вы могли бы легко написать небольшую функцию для этого.Грубо говоря, если вы:

  РАЗДЕЛ. Текст

global _mystrlen

_mystrlen:

    нажать ebp; соответствуют соглашениям о вызовах C.
    mov ebp, esp

    xor eax, eax
    Lea ecx, [esp + 8]; загрузить начало массива в ecx
    jecxz end; прыжок, если [ecx] равен нулю.

петля:
    добавить eax, 1; также можно использовать inc eax.
    добавить ecx, 4; всегда увеличивать на (sizeof (int)). При необходимости измените
    mov edx, [ecx]; загрузить ecx
    cmp edx, 0; сравнить с зерпом
    je end; если ecx равен нулю, все готово.jmp loop; если ecx не равен нулю, цикл до тех пор, пока он не станет равным.

конец:
    покинуть              ; восстановить кадр стека
    ret; возвращение. eax является retval
  

Обратите внимание, что я это не тестировал. Просто чтобы дать вам представление.

Edit Я тестировал версию x86_64 в Linux, используя rdi в качестве param1, передавая int arr [10] = {1,2,3,4,5,6,7,8,9 , 0}; . Возвращает 9 , как и ожидалось. Обратите внимание, что в Linux подчеркивание перед mystrlen не требуется.

Сборка

x86: Irvine32 — Получить последний элемент массива

Я думаю, что ваше решение для достижения последнего элемента является наиболее эффективным ( ($ -val1) / 2 ), но @ zx485 прав, и ваш учитель может подумать, что вы обманываете, поэтому среди других решений вы можете достичь последний элемент с циклом и указателем SI:

  ВКЛЮЧИТЬ Irvine32.inc
.данные
  val1 слово 1,2,3,4,5,6
  val2 = ($ -val1) / 2
.код
основной ПРОЦЕССОР
; mov ax, 0
; mov ax, val1 [val2]

  mov cx, val2-1; СЧЕТЧИК ДЛЯ ЦИКЛА (ДЛИНА-1).mov si, offset val1; SI УКАЗЫВАЕТ НА ПЕРВОЕ СЛОВО В МАССИВЕ.
повторить:
  add si, 2; УКАЗАТЬ НА СЛЕДУЮЩЕЕ СЛОВО В МАССЕ.
  цикл повторения; CX--, ЕСЛИ CX> 0 REPEAT.

  mov ax, [si]; ПОСЛЕДНЕЕ СЛОВО!

  Позвонить в WriteDec
  Вызов DumpRegs
 выход
основной ENDP
КОНЕЦ основной
  

Более короткий способ — избавиться от цикла и перейти прямо к последнему элементу, используя указатель SI (и немного изменив значение val2 ):

  ВКЛЮЧИТЬ Irvine32.inc
.данные
  val1 dw 1,2,3,4,5,6
  val2 = ($ -val1) -2; ТЕПЕРЬ МЫ ПОЛУЧИЛИ ДЛИНУ - 2 БАЙТА.
.код
основной ПРОЦЕССОР
; mov ax, 0
; mov ax, val1 [val2]

  mov si, offset val1; SI УКАЗЫВАЕТ НА ПЕРВОЕ СЛОВО В МАССИВЕ.
  add si, val2; SI УКАЗЫВАЕТ НА ПОСЛЕДНЕЕ СЛОВО.
  mov ax, [si]; ПОСЛЕДНЕЕ СЛОВО!

  Позвонить в WriteDec
  Вызов DumpRegs
 выход
основной ENDP
КОНЕЦ основной
  

И «Да», вы можете объединить эти две строки:

  mov si, offset val1; SI УКАЗЫВАЕТ НА ПЕРВОЕ СЛОВО В МАССЕ.
  add si, val2; SI УКАЗЫВАЕТ НА ПОСЛЕДНЕЕ СЛОВО. 

в один, я разделил их, чтобы комментировать друг друга:

  mov si, смещение val1 + val2
  

Если вы не можете использовать val2 = ($ -val1) / 2 , одним из вариантов было бы выбрать некоторый завершающий символ для массива, например '$' , и цикл до его обнаружения:

  ВКЛЮЧИТЬ Irvine32.inc
.данные
  val1 word 1,2,3,4,5,6, '$'; Массив с завершающим символом.
  ; значение2 = ($ -значение1) / 2
.код
основной ПРОЦЕССОР
  ; mov ax, 0
  ; mov ax, val1 [val2]

  mov si, offset val1; SI УКАЗЫВАЕТ НА VAL1.mov ax, '$'; ЗАВЕРШАЮЩИЙ ХАРАКТЕР.
повторить:
  cmp [si], ax
  je dollar_found; IF [SI] == '$'
  добавить si, 2; СЛЕДУЮЩЕЕ СЛОВО В МАССЕ.
  jmp повторять

доллар_фунд:
  sub si, 2; ПРЕДЫДУЩЕЕ СЛОВО.
  mov ax, [si]; ОКОНЧАТЕЛЬНОЕ СЛОВО!

  Позвонить в WriteDec
  Вызов DumpRegs
 выход
основной ENDP
КОНЕЦ основной
  

Array.prototype.length — JavaScript | MDN

Свойство length объекта, который является экземпляром типа Array , устанавливает или возвращает количество элементов в этом массиве.32).

  var namelistA = новый массив (4294967296);
var namelistC = новый массив (-100)

console.log (namelistA.length);
console.log (список именC.length);

var namelistB = [];
namelistB.length = Math.pow (2,32) -1;
console.log (namelistB.length);


  

Вы можете установить свойство length для усечения массива в любое время. Когда вы расширяете массив, изменяя его свойство length , количество фактических элементов увеличивается; например, если вы установите длину равной 3, когда она в настоящее время равна 2, массив теперь будет содержать 3 элемента, что приведет к тому, что третий элемент будет не повторяющимся пустым слотом.

  const arr = [1, 2];
console.log (об);


arr.length = 5;
console.log (об);


arr.forEach (element => console.log (element));


  

Как видите, свойство length не обязательно указывает количество определенных значений в массиве. См. Также Связь между длиной и числовыми свойствами.

с возможностью записи да
Перечислимый
Настраиваемый
  • Возможность записи : Если для этого атрибута установлено значение false , значение свойства не может быть изменено.
  • Configurable : Если для этого атрибута установлено значение false , любые попытки удалить свойство или изменить его атрибуты ( Writable , Configurable или Enumerable ) потерпят неудачу.
  • Enumerable : если для этого атрибута установлено значение true , свойство будет повторяться во время циклов for или for..in.

Итерация по массиву

В следующем примере выполняется итерация по массиву чисел путем просмотра свойства длины .Затем значение каждого элемента удваивается.

  var числа = [1, 2, 3, 4, 5];
var length = numbers.length;
for (var i = 0; i  

Сокращение массива

Следующий пример сокращает массив чисел до длины 3, если текущая длина больше 3.

  var числа = [1, 2, 3, 4, 5];

if (numbers.length> 3) {
  numbers.length = 3;
}

console.log (числа);
console.log (числа.длина);
  

Создать пустой массив фиксированной длины

  var numbers = [];
numbers.length = 3;
console.log (числа);
  

Таблицы BCD загружаются только в браузер

Изучение эффективной длины поглощения массива Si наноотверстий для фотоэлектрических элементов с помощью плазмонно-усиленного комбинационного рассеяния света

Аннотация

Либо нанопроволока, либо массив наноотверстий для полупроводников оказались эффективными наноструктурами для сбора солнечного света.Однако для Si длина наноструктуры около нескольких микрометров требуется для обеспечения приемлемого поглощения. Хотя эта длина уже намного меньше, чем у объемного Si, для которого требуются сотни микрометров, длина микрометров все еще невозможна для наноструктуры Si. Наноструктуры высокой плотности вызовут обширную поверхностную рекомбинацию, которая снижает эффективность преобразования энергии. Поэтому изучение зависимости поглощения света от длины наноструктуры Si очень важно для разработки эффективного солнечного элемента.В данной работе массив Si наноотверстий был изготовлен на нескольких глубинах от 110 до 960 нм. Полное отражение было менее 1% в видимом режиме для отверстия глубиной 960 нм. Наночастицы Ag были помещены на дно наноотверстия, чтобы исследовать поглощение света с помощью плазмонно-усиленного комбинационного рассеяния света. Химическое вещество, pNTP, представляло собой покрывающую наночастицу Ag в качестве датчика плазмонного эффекта. Когда лазерный свет падает на наночастицу Ag, поверхностный плазмонный эффект усиливает рамановское рассеяние pNTP.Усиленный сигнал комбинационного рассеяния, полученный от pNTP, указывает на то, что падающий свет может проникать на дно массива Si наноотверстий без значительного поглощения. Результаты эксперимента указывают на быстрое затухание рамановского сигнала после того, как глубина наноотверстия превышает 240 нм. Этот результат показывает, что длина наноструктуры Si может не потребовать микрометров для сбора падающего солнечного света. Это открытие проложило светлый путь для создания кремниевых солнечных элементов с наноструктурами.

© (2015) АВТОРСКОЕ ПРАВО Общество инженеров по фотооптическому приборостроению (SPIE).Скачивание тезисов разрешено только для личного использования.

Эмиссия эрбия в фрактальных массивах кремниевых нанопроволок, украшенных Er: Y2O3

Abstract

Неупорядоченные материалы с новыми оптическими свойствами привлекают внимание научного сообщества благодаря наблюдению за инновационными явлениями. Мы представляем реализацию новых оптических материалов, полученных из фрактальных массивов кремниевых нанопроволок (ННК), синтезированных с низкими затратами, без использования масок или литографии и декорированных Er: Y 2 O 3 , одним из наиболее перспективных материалов для интеграция эрбия в фотонике.Исследованные структурные свойства фракталов Er: Y 2 O 3 / NW показывают, что фрактальная морфология может настраиваться в зависимости от угла напыления напылением (от 5 ° до 15 °) Er: Y 2 О 3 пласт. Мы демонстрируем, что с помощью этого нового подхода можно просто изменить интенсивность излучения Er, контролируя фрактальную морфологию. Действительно, мы достигли увеличения эмиссии Er на длине волны 560 нм, открыв новые перспективы в управлении и улучшении оптического отклика новых неупорядоченных материалов.

Тематические термины: Оптическая физика, методы и приборы

Введение

Кремниевая фотоника - одна из самых интересных тем в области интегральной оптики 1 . Прогресс в этом секторе тесно связан с совместимостью с технологией микроэлектроники и, как следствие, реализацией недорогих схем, способных реализовать большое количество функций в одном и том же чипе. Развитие производства микроэлектроники сделало возможным производство микропроцессоров, состоящих из сотен миллионов компонентов, упакованных с размерами порядка нескольких см 2 .Длина металлических межсоединений теперь составляет порядка 10 км в микрометрической области, и поэтому требуется много уровней металла. Это резкое увеличение общей длины металлической схемы приводит к последующему увеличению задержек сигналов, перекрестных помех между сигналами и рассеиваемой мощности, которые являются критическими ограничениями для дальнейших разработок. Все научное сообщество определяет эту проблему как электронное узкое место, что делает дальнейшее уменьшение минимального размера элемента очень сложной задачей 2 .Замена электрических сигналов оптическими для передачи и обработки информации, безусловно, может решить проблемы времени задержки сигнала и дисперсии мощности 3 , 4 .

Использование кремниевой оптоэлектроники могло бы решить многие из этих трудностей. Однако массивный кремний имеет непрямую запрещенную зону, поэтому он крайне неэффективен в качестве источника света. Много усилий было направлено на исследование различных стратегий решения проблемы физической неспособности Si излучать свет при комнатной температуре.Квантовое ограничение - более перспективный подход для получения излучения света кремнием при комнатной температуре. Наиболее обнадеживающими системами, ограниченными кремнием, являются нанокластеры Si 5 , 6 , пористый Si 7 , 8 , а в последние годы Si нанопроволоки (ННК) вызывают все больший интерес для приложений фотоники 9 11 . Мы уже продемонстрировали реализацию Si ННК с чрезвычайно малым диаметром, совместимую с наблюдением эффектов ограничения квантов, ведущих к наблюдению излучения света при комнатной температуре.Эти Si ННК получают с помощью модифицированного процесса влажного травления с использованием металла 10 , методики приготовления, которая является недорогой, быстрой и совместимой с кремниевой технологией. Кроме того, исследование и оптимизация их получения позволили реализовать массивы Si нанопроволок с фрактальной геометрией 12 , демонстрирующие очень интересные оптические свойства.

Фракталы образуются в природе спонтанно, чтобы минимизировать поверхностную энергию системы, одновременно увеличивая ее энтропию.Фрактальные структуры представляют большой интерес для научного сообщества из-за их необычайного свойства масштабной инвариантности, способного способствовать локализации света 13 , 14 и эффектам нелинейной оптики 15 , 16 , в сочетании с сильная электрическая проводимость 17 , 18 и супердиффузия 19 . Из-за значительных колебаний показателя преломления по его морфологии фрактальные ННК особенно подходят и многообещающи для сильного рассеяния и эффектов локализации света.В частности, эти фрактальные ННК демонстрируют эффективное улавливание света из-за многократного рассеяния в плоскости 12 , что позволяет улучшить оптический отклик системы в зависимости от фрактальных параметров с потенциалом как для фотоэлектрических, так и для фотонных приложений. Среди усилий научного сообщества по эффективному производству фотонов из кремния очень хорошо изученным подходом является введение светоизлучающих примесей, таких как ионы редкоземельных элементов. Среди редкоземельных элементов эрбий является одной из наиболее изученных и интересных систем с соответствующим преимуществом, заключающимся в том, что стандартная кремниевая технология может использоваться для введения эрбия в качестве легирующей примеси в Si-совместимый материал 20 , 21 .Однако из-за его низкой растворимости и малого сечения возбуждения были использованы различные подходы для улучшения оптических характеристик SiO, легированного Er 3+ , 2 22 . Некоторые из этих методов включают использование сенсибилизаторов Er 3+ , таких как кремниевые нанокластеры 23 , 24 , имеющие поперечное сечение возбуждения на четыре порядка больше, чем у эрбия в кремнеземе. Более того, Er можно эффективно возбуждать нерезонансным переносом.Ключевым моментом, ограничивающим характеристики эрбия, является максимальная концентрация Er 3+ , которая может быть введена без возникновения явления кластеризации и безызлучательных ион-ионных взаимодействий. Критическая концентрация легирования зависит от матрицы. Er имеет тенденцию к сегрегации и осаждению, определяя формирование оптически неактивных кластеров эрбия. Ион-ионные взаимодействия представляют собой еще один предел, связанный с высокими концентрациями Er, которые определяют уменьшение излучения ФЛ из-за возникновения этих безызлучательных явлений 25 , 26 .Научное сообщество приложило много усилий для создания Si-совместимых материалов, которые позволяют включать высокие концентрации оптически активных ионов эрбия, таких как силикаты Er 26 - 28 или смешанные соединения 25 , 29 , 30 . Среди них Y 2 O 3 -хозяин оказался отличным компромиссом между максимизацией концентрации эрбия и ограничением вредных ион-ионных взаимодействий 31 , 32 .Действительно, поскольку кристаллическая структура Y 2 O 3 идентична структуре Er 2 O 3 , ионы эрбия могут быть введены в решетку Y 2 O 3 в Y замещающие позиции, до концентраций 10 22 ат / см 3 без кластеризации 33 , 34 . Кроме того, пленка Y 2 O 3 совместима с кремниевой платформой и может быть синтезирована с помощью различных промышленных технологий, таких как распыление.Мы создали новую платформу, объединив два материала с огромным потенциалом в области фотоники с недорогим подходом, совместимым с кремниевой технологией. Фактически, в этой статье мы украсили фрактальные массивы Si ННК с Y 2 O 3 , легированным Er, с помощью процесса наклонного распыления, настраивая фрактальную морфологию в соответствии с углом осаждения и, таким образом, приводя к увеличению эмиссии эрбия. .

Результаты и обсуждение

Украшение кремниевых ННК Y, легированным Er

2 O 3

Двумерные случайные фрактальные массивы нанопроволок Si были получены путем химического травления подложки Si (111) n-типа с помощью металла. (P-легированный, ρ 1–5 Ом ∙ см) с использованием 2 нм прерывистого слоя Au 35 .Мы декорировали фрактальные массивы вертикально ориентированных Si ННК длиной около 2,5 мкм легированным Er Y 2 O 3 , нанесенным методом магнетронного распыления под косым углом. С помощью этого подхода мы продемонстрировали возможность получения декорированных фрактальных систем, морфология которых может изменяться в зависимости от угла осаждения.

Схематическое изображение процесса декорирования кремниевых ННК Y 2 O 3 легированным Er с помощью магнетронного распыления под косым углом изображено на рис.а.

( a ) Схема установки для распыления под косым углом, используемая для декорирования массивов Si нанопроволок, и типичная схема ( b ) атомов Er, занимающих позиции замещения в матрице Y 2 O 3 . СЭМ-микроскопия массивов Si ННК до и после декорирования Er: Y 2 O 3 под углом 15 °, полученная в поперечном сечении ( c, d ) и на виде сверху ( e, f ), соответственно.

Свежеприготовленные ННК вместе с объемными эталонными подложками Si были размещены на держателях образцов, каждый из которых был наклонен под фиксированным углом θ относительно стандартного положения параллельно мишеням (θ = 0 °).Мишени Y 2 O 3 и Er 2 O 3 были одновременно распылены магнетронным распылением в сверхвысоком вакууме (подробности см. В разделе «Материалы и методы») на вращающемся держателе подложки, нагретом до 300 °. С. Условия осаждения были оптимизированы, чтобы синтезировать высококачественный материал с высоким содержанием Er, в котором все ионы Er 3+ оптически активны в матрице оксида иттрия, выбранной также из-за его совместимости с Si. Примечательно, что Y 2 O 3 и Er 2 O 3 имеют одинаковую кристаллическую кубическую структуру с аналогичными параметрами решетки, что позволяет Er 3+ заменять ионы Y 3+ в позициях замещения (как изображенная на схеме на рис.б). В данной работе все параметры осаждения (за исключением угла наклона) поддерживались постоянными, что обеспечивало одинаковую стехиометрию и концентрацию Er для всех исследованных образцов. Поперечное сечение сканирующей электронной микроскопии (SEM) на рис. C, d показывает фрактальный массив с высокой плотностью вертикально ориентированных Si ННК длиной 2,5 мкм до и после декорирования под углом 15 °, синтез которых описан в разделе «Методы». раздел. Контроль косого угла осаждения на вертикальные массивы Si ННК позволяет изменять их морфологию, используя их эффекты самозатенения.Фактически, при выбранных условиях осаждения эффект угла заключается в увеличении глубины декорирования вдоль боковых стенок NW, способствуя более равномерному покрытию при увеличении угла наклона. Чтобы продемонстрировать такое поведение и исследовать влияние осаждения под косым углом на структурные и оптические свойства ННК, набор фрактальных образцов ННК длиной 2,5 мкм был декорирован под тремя разными углами: 5 °, 10 ° и 15 °. . Для каждого угла пленки Er: Y 2 O 3 были одновременно нанесены на объемные подложки Si для использования в качестве эталонов.Стехиометрия Er: Y 2 O 3 была проверена без изменений для всех нанесенных образцов, что подтверждено измерениями спектрометрии обратного рассеяния Резерфорда (RBS), обсуждаемыми в дополнительной информации S1. Действительно, для всех углов наклона элементарные дозы Er, Y и O находятся в соотношении (Er + Y): O = 2: 3 с примерно 4,5 × 10 17 ат / см 2 и 7 × 10 17 ат / см 2 для иттрия и кислорода, тогда как общая доза 0,3 × 10 17 ат / см 2 для эрбия, что соответствует концентрации Er около 2 ± 1 ат.%.Все образцы NW и эталоны Si были помещены в одно и то же положение наклонного держателя, чтобы гарантировать хорошую однородность как с точки зрения морфологического, так и оптического отклика.

Фрактальная характеристика

На рисунке e показано изображение SEM в плане голых ННК до процесса декорирования. Как уже было продемонстрировано 12 , 35 , эти массивы Si ННК представляют собой искусственные двумерные случайные фракталы, полученные путем химического травления с помощью металла с использованием перколяционных пленок золота в качестве катализатора.Выше предела перколяции слой-предшественник Au имеет фрактальное расположение 36 , 37 , дополнительное расположение которых переносится на Si ННК во время травления с помощью хорошо контролируемого, не требующего маски, недорогого и промышленно совместимого метода. Фрактал реализуется рекурсивным повторением структуры в пространстве с масштабной инвариантностью и самоподобием 38 . В частности, наши массивы ННК представляют собой конечные фракталы, демонстрирующие сильное самоподобие в широком диапазоне масштабов длины, от десятков нанометров до нескольких микрон.Мы уже продемонстрировали, что фрактальная особая морфология ННК приводит к сильному захвату света во всем видимом и ближнем ИК-диапазоне из-за эффективного многократного рассеяния в плоскости в слое ННК 12 , с многообещающими возможностями для обеих фотоэлектрических систем. и фотоника 11 . Замечательная флуктуация показателя преломления в слое NW позволяет улучшить оптический отклик системы в зависимости от фрактального расположения 39 , 40 .

В данной работе мы получили оформление фрактальной композиции ННК с помощью Er: Y 2 O 3 без нарушения морфологии фрактала. Изменяя угол напыления θ от 5 °, до 10 ° и 15 °, мы демонстрируем возможность настройки фрактальной морфологии с помощью промышленного совместимого и экономичного подхода. На рис. E, f сравниваются полученные на сканирующем электронном микроскопе микроскопии голых и украшенных Er: Y 2 O 3 Si ННК под углом 15 °, соответственно. Сравнивая два изображения, представленных в одном масштабе увеличения, можно засвидетельствовать, что случайное фрактальное расположение ННК все еще сохраняется после процесса декорирования, но в другом диапазоне масштабов, поскольку промежутки между нанопроводами теперь равномерно покрыты Er: Y 2 O 3 структур (см. Дополнительную информацию, разд.3). Хотя фрактальная структура все еще присутствует, она изменилась после украшения, и большие отверстия, окружающие ННК, немного уменьшились в размерах.

Ключевые параметры фрактала, такие как фактор заполнения, лакунарность и фрактальные размерности, были исследованы для всех образцов с помощью программного анализа изображений в плане высокого разрешения SEM, как описано в экспериментальном разделе. Как подтверждается полным фрактальным анализом, представленным в таблице, мы продемонстрировали реализацию случайной фрактальной структуры Er: Y 2 O 3 декорированных Si ННК, что свидетельствует о возможности изменения фрактального расположения путем изменения угла осаждения. субстрата.

Таблица 1

Структурные и фрактальные параметры образцов Si NW и Si NW без покрытия, украшенных Er: Y 2 O 3 , измеренные с помощью программного обеспечения ImageJ, анализирующего изображения SEM в плане.

Название Фактор заполнения Si + Er: Y 2 O 3 Фактор заполнения Er: Y 2 O 3 Фрактальный размер D F нм )
NW без покрытия 42% ± 2% 1.88 ± 0,02 53 ± 1
5 ° 76% ± 1% 34% ± 1% 1,97 ± 0,01 120 ± 3
10 ° 74% ± 1 % 32% ± 1% 1,96 ± 0,02 160 ± 6
15 ° 69% ± 1% 27% ± 1% 1,94 ± 0,02 190 ± 10

Структурная характеристика

Морфология Er: Y 2 O 3 декорированных Si ННК была исследована с помощью SEM как в плане, так и в поперечном сечении для каждого угла наклона.Стоит отметить, что массивы Si ННК не повреждаются в процессе декорирования и наличие равномерного покрытия Er: Y 2 O 3 заметно с вида сверху ННК для всех исследованных образцов. Чтобы оценить покрытие боковых стенок СЗ, мы также выполнили СЭМ-изображения в поперечном сечении. В качестве представителя ансамбля на рис. А показано поперечное сечение образца, декорированного под углом 10 °, на сканирующем электронном микроскопе, на котором просматривается весь декорированный массив, в то время как на рис. B, c показаны детали того же массива с большим увеличением, соответствующие изображению верхняя и нижняя секции соответственно.Присутствие поликристаллической структуры Y 2 O 3 , украшающей самую верхнюю часть кончиков ННК, хорошо видно на рис. B. В то время как на рис. C присутствие Y 2 O 3 больше не распознается вдоль боковой стенки NW, как только мы приближаемся к самой внутренней части массива. С другой стороны, осаждение под косым углом на плоские массивные эталоны Si привело к получению сплошных пленок Er: Y 2 O 3 с неизменной стехиометрией за счет увеличения угла наклона.

( a ) СЭМ поперечные сечения Si ННК, украшенных Er: Y 2 O 3 под углом 10 ° путем осаждения под косым углом. Декорированные концы ННК ( b ) и нижние части ( c ) показаны при большем увеличении соответственно. ( d ) EDX-спектр, полученный на верхней (красная линия), центральной (синяя линия) и нижней (зеленая линия) областях декорированных массивов NW, выделенных кружками соответствующих цветов, как показано на ( a ).

Для исследования зависимости распределения Er: Y 2 O 3 вдоль боковых стенок нанопроволок от угла наклона был проведен анализ энергодисперсионной рентгеновской (EDX) спектроскопии.Спектры EDX, записанные по длине ННК в верхнем (красный кружок), центральном (синий кружок) и нижнем (зеленый кружок) сечениях, представлены на рис. D для того же образца, осажденного под углом 10 °. Во всех трех зонах были обнаружены сигналы относительно Si от Si ННК и Y и O от осажденной матрицы. Поскольку концентрация Er в образцах низкая, 2 ат.%, Равномерно диспергированных в матрице Y 2 O 3 , его эмиссионные линии X не обнаруживаются с помощью EDX-анализа. В центральной и базовой областях мы зафиксировали снижение сигнала Y Lα1 (1.9 кэВ) до 16% и 4% от значения, измеренного на концах ННК.

Концентрация кислорода ведет себя аналогичным образом, снижаясь до 54% ​​и 20% от своего значения наверху для эмиссионной линии Kα O при 0,5 кэВ, в то время как эмиссионная линия Si Kα при 1,75 кэВ показывает, что концентрация Si испытывает 5 % уменьшение в верхней области из-за большого присутствия Y 2 O 3 . Расхождение в процентном снижении Y и O можно объяснить, если учесть, что на оценку O также влияет присутствие SiO 2 снаряд, окружающий СЗ.Профили глубины EDX продемонстрировали аналогичные тенденции концентрации в зависимости от положения вдоль боковых стенок СЗ для всех исследованных углов наклона. Хотя точная оценка длины, покрываемой Er: Y 2 O 3 , не может быть дана с высокой точностью, мы можем утверждать, что на глубине около 1,5 мкм от вершины, присутствие Y 2 O 3 снижается ниже 10% от его концентрации на концах NW для всех углов наклона. Более того, мы можем исключить образование силиката Er на границе раздела между Er: Y 2 O 3 и Si ННК из-за низкой температуры подложки 300 ° C, используемой во время осаждения, как уже было продемонстрировано в литературе 33 , 41 .

Действительно, отсутствие силикатов Er в Er: Y 2 O 3 декорированных ННК было также подтверждено анализом дифракции рентгеновских лучей (XRD), и никаких признаков характерных пиков силиката эрбия обнаружено не было, как сообщается в инжир. S2 дополнительной информации.

Зависимость коэффициента заполнения от угла наклона наплавки

Чтобы продемонстрировать, что с помощью этого декорирования распыления под косым углом можно настроить фрактальную морфологию Er: Y 2 O 3 / NW, мы провели детальное анализ критических фрактальных параметров.

Основным видимым эффектом декора является приращение коэффициента заполнения (FF), а именно, определяемое как отношение покрываемой площади к общей площади анализируемого изображения, измеренное путем подсчета пикселей (подробности приведены в разделе дополнительной информации. S3). Для голых Si ННК было измерено значение FF около 42 ± 2%. После осаждения равного количества Er: Y2O3 образцы декорированных ННК под углом 5 °, 10 ° и 15 ° показывают FF 76 ± 1%, 74 ± 1% и 69 ± 1% соответственно (как показано в Таблице ).

Эти результаты для коэффициентов заполнения подчеркивают сильную корреляцию с углом наклона. Фактически, значение FF уменьшается с увеличением угла наклона осаждения, что позволяет предположить, что большая часть Y 2 O 3 распределяется вдоль боковых стенок ННК, чем на их концах. В соответствии с ожидаемыми эффектами затенения глубина декорирования, достигаемая оксидом иттрия вдоль вертикального профиля НП, увеличивается с увеличением углов. Этот эффект можно понять, учитывая, что с увеличением угла коэффициент заполнения уменьшается, тем самым уменьшая апертуру затемняющего конуса.Как следствие, морфология матрицы Er: Y 2 O 3 может быть просто изменена в плоскости x – y ННК из-за эффекта осаждения под косым углом. Более того, типичной особенностью фракталов, возникающей из-за их масштабной инвариантности, является измерение одного и того же процента покрытия поверхности при разных увеличениях. Действительно, фрактальный массив Si ННК показывает примерно одинаковый коэффициент заполнения для всех трех исследованных увеличений: 5kX (низкое), 50 kX (среднее) и 300 kX (высокое).

Подобно фрактальному массиву голых Si ННК, Er: Y 2 O 3 декорированных Si ННК представляют один и тот же FF для трех малых, средних и больших увеличений, измеренных для подтверждения фрактальной геометрии декорированной системы. . Стоит отметить, что меньшие отверстия больше не заметны при большем увеличении (более 300 kX) из-за декоративного покрытия.

Корреляция фрактальных параметров

Такая самоподобие, подтвержденная коэффициентом заполнения, типична для фрактальных геометрий, которые представляют масштабную инвариантность в широком масштабе длины 42 .Таким образом, для исследования фрактальной природы Er: Y 2 O 3 массивов декорированных Si ННК были измерены фрактальные характеристические параметры фрактальной размерности (D F ) и лакунарности (L c ) как функция масштабной инвариантности системы. Фрактальная размерность измеряет сложность структуры, подтверждая, как узор масштабируется в зависимости от исследуемой шкалы длины 35 . Используемая методология и процедуры расчета фрактальных параметров подробно описаны в разделе «Дополнительная информация» S3.

Как и ожидалось, мы рассчитали D F около 1,88 ± 0,02 для голых Si ННК, подтверждая утверждение, что эти массивы Si ННК отображают двумерное случайное фрактальное расположение, как ранее подробно продемонстрировано 12 . Точно так же Er: Y 2 O 3 декорированные Si ННК ведут себя как статистические фракталы, представляя нецелочисленное значение D F , слегка изменяющееся от 1,97 до 1,94 при увеличении угла наклона осаждения. Тем не менее, D F не описывает однозначно фрактальный узор, и может случиться так, что два разных фрактальных расположения масштабируются с одной и той же фрактальной размерностью.Действительно, основным параметром, однозначно описывающим структурные свойства фрактала, является лакунарность (L c , математически определенная в соответствии с методом, подробно описанным в разделе S3 дополнительной информации). Измерения лакунарности используются для выявления масштабно-зависимых изменений пространственной структуры, поскольку они связаны с отклонением фракталов от трансляционной инвариантности. Он предоставляет дополнительную информацию о фрактальной размерности, описывая, как фрактальная текстура организована с точки зрения флуктуации распределения чередования пустых и заполненных пространств, т.е.е. неоднородности 43 . Лакунарность связана с разбросом распределения отверстий по размерам, измеренным при разных масштабах увеличения, что позволяет исследовать повторение одной и той же морфологии, типичной для фракталов. Действительно, те фракталы, неоднородности которых представляют большие флуктуации, приводят к высокой лакунарности для исследуемого диапазона. В частности, ожидается, что случайные и плотные фракталы будут демонстрировать высокую лакунарность (L c > 1). Между тем, в полностью однородных структурах нет лакунарности (L c = 1).Тенденция лакунарности была исследована для каждого образца в зависимости от масштаба длины, и значения длины, при которых лакунарность принимает максимум, были восстановлены для всех выборок в таблице. Масштаб длины, на котором измеряется пик неточности, соответствует максимальной флуктуации неоднородностей системы, определяя сильную флуктуацию показателя преломления и, таким образом, увеличивая силу рассеяния материала, как хорошо известно в литературе 12 , 36 , 44 .

ННК с голым кремнием демонстрируют значительные колебания неоднородности в диапазоне размеров от 30 до 200 нм. Их пик лакунарности достигает максимального значения 1,35 на масштабе 53 нм и полной ширины на полувысоте (ΔL c ) около 50 нм. Следовательно, двумерный случайный фрактальный массив голых Si ННК представляет сильные флуктуации неоднородности на меньшем масштабе длины около 50 нм. Можно сделать вывод, что распределение размеров отверстий в голых Si ННК сильно колеблется для размеров менее 200 нм.

Как и ожидалось, с помощью декорирования распылением под косым углом можно изменить лакунарность системы. Интенсивность пика лакунарности уменьшается примерно на 51%, 43% и 40% по отношению к голым ННК, смещаясь в сторону большей шкалы длин 120, 160 и 190 нм для образцов с 5 °, 10 ° и 15 ° декорированных ННК, соответственно. Угол наклона осаждения является ключевым параметром, который влияет как на коэффициент заполнения, так и на лакунарность, определяя, как материал распределяется по фрактальной структуре ННК.В конце концов, более высокая лакунарность и меньшие значения коэффициента заполнения измеряются при увеличении угла осаждения. Действительно, для более высокого угла осаждения Er: Y 2 O 3 украшает более глубокую секцию вдоль вертикального профиля NW, уменьшая коэффициент заполнения и, таким образом, увеличивая плотность больших отверстий случайного размера, в то время как меньшие отверстия среди NW закрываются нанесенный материал. Поскольку самые маленькие отверстия закрыты, флуктуация распределения размеров отверстий уменьшается в меньшем масштабе, таким образом смещая пик лакунарности в сторону области большей длины.С другой стороны, теперь преобладает плотность более крупных дыр, и флуктуация ее статистического распределения увеличивается в сторону все более и более широкого масштаба. Кроме того, расширение диапазона колебаний неоднородности (ΔL c ) также увеличивается из-за эффекта затенения при увеличении угла декорирования, поскольку более крупные отверстия остаются частично открытыми с распределением размеров, которое сильно варьируется в более широкой области (до 800 нм. ). Можно сделать вывод, что морфологией и структурными параметрами двумерных случайных фрактальных массивов декорированных ННК Er: Y 2 O 3 Si можно управлять, варьируя угол напыления.Фактически, наиболее неупорядоченные условия лакунарности достигаются при угле 15 °, где максимальное значение 1,18 наблюдается для пика лакунарности, который простирается на более широкую область с ΔL c ≈ 340 нм.

Фотолюминесцентные свойства

Характеристики оптического отклика голых ННК, Er: Y 2 O 3 декорированных ННК и Er: Y 2 O 3 пленок на массивной подложке Si были протестированы с помощью фотолюминесценции (PL) спектроскопия (рис.).

( a ) Видимое излучение фотолюминесценции на длине волны около 700 нм, наблюдаемое для чистых Si ННК до декорирования на длине волны возбуждения 488 нм. ( b ) Спектры фотолюминесценции Er: Y 2 O 3 образцов декорированных Si ННК в зависимости от угла осаждения и по сравнению с их объемными эталонами Si ( c ) при той же длине волны возбуждения 488 нм . На вставках показано исследование оптической микроскопии луча лазерной накачки, рассеянного вне плоскости для трех представленных подложек: ( a ) Si ННК без покрытия, Er: Y 2 O 3 декорированных ( b ) Si ННК и ( c ) Объем Si, нанесенный при тех же условиях.

Спектр ФЛ голых Si ННК, полученный на длине волны возбуждения 488 нм, представлен на рис. Типичная полоса излучения ФЛ ННК центрируется примерно на 700 нм из-за эффекта квантового ограничения 35 . Мы наблюдали различное рассеяние системы декорированных ННК с помощью светлопольной микроскопии (BF), полученной при лазерном освещении, как показано на вставке к рис. А. BF микроскопия голых Si ННК показывает, что большая часть света задерживается внутри фрактала ННК из-за их сильного рассеяния, вызванного модуляцией показателя преломления системы 12 , 35 .Видимая фотолюминесценция Er из Er: Y 2 O 3 на объем Si и на ННК также была протестирована как функция угла наклона осаждения при длине волны возбуждения 488 нм, резонансной с 4 I 15/2. 4 F 7/2 Er 3+ переход, как показано на рис. B, c, соответственно. Все спектры ФЛ были получены при комнатной температуре в одних и тех же экспериментальных условиях, нормированы на мощность накачки и усреднены в разных точках для учета однородности системы.

Спектры фотолюминесценции всех Er: Y 2 O 3 показывают характерное излучение Er мультиплетов 4 S 3/2 и 4 F 9/2 с максимумом около 560 и 660 нм соответственно. Однако для пленок на Si наблюдается иная зависимость ФЛ от угла осаждения по сравнению с декорированными ННК. Как и ожидалось, из-за неизменного содержания и распределения Er не наблюдается соответствующих изменений в зависимости от угла осаждения в пленках Er: Y 2 O 3 на объем Si (рис.в). Напротив, интенсивность ФЛ Er: Y 2 O 3 декорированных ННК увеличивается при увеличении угла наклона (рис. B), что свидетельствует о зависимости оптических свойств от морфологии фрактала. Мы измерили приращение ФЛ для полосы Er при 560 нм в 1,1 раза для образца 10 ° NWs и 2,4 для 15 ° по отношению к образцу, нанесенному под 5 °. Более того, полоса люминесценции Si ННК больше не наблюдается, поскольку она менее эффективна, чем эмиссия Er.

Такое своеобразное поведение предполагает, что угол осаждения θ влияет на оптическое излучение, поскольку он определяет морфологию фракталов и, в частности, его лакунарность. Действительно, различная лакунарность определяет модуляцию показателя преломления, что приводит к сильному рассеянию внутри материала. Этот эффект позволяет усилить возбуждение системы, следовательно, интенсивность излучения Er 36 , 44 , 45 .

Таким образом, наблюдаемое улучшение ФЛ Er в декорированных Si ННК можно приписать усилению накачки возбуждения за счет эффектов рассеяния, обусловленных фрактальными параметрами 12 , 46 , 47 .

Светлопольные микроскопы были получены в тех же экспериментальных условиях и для Er: Y 2 O 3 , нанесенного под тем же углом 15 ° на Si ННК и объем Si, как показано на вставке к рис. B. , c соответственно. Из сравнения всех образцов видно, что протяженность рассеянного света увеличивается при переходе от голых Si ННК к декорированным Er. Рисунок c показывает, что большая часть света действительно рассеивается в объемных образцах Si: Y 2 O 3 , что свидетельствует о том, что свет лучше улавливается в Er: Y 2 O 3 декорированных ННК. .

Чтобы оценить возможную роль опосредованного возбуждения от Si ННК к ионам Er, спектры эрбиевой ФЛ для декорированных Si ННК под углом 15 ° показаны на рис. (488 нм) и непрямое (476 нм) возбуждение показаны красным и синим цветом соответственно. При непрямом возбуждении спектры ФЛ Er имеют очень низкую интенсивность как для видимого, так и для инфракрасного излучения, что соответствует снятию возбуждения от 4 S 3/2 , 4 F 9/2 и 4 I 13/2 .Наблюдаемая широкая полоса излучения около 600 нм может быть в основном связана с возможными дефектами, а также присутствует в качестве фона для прямого возбуждения (красный спектр). Таким образом, можно сделать вывод, что передача энергии как при прямой, так и при непрямой оптической накачке не происходит. Однако приращение ФЛ для декорированных ННК по отношению к объему Si наблюдается как для видимого, так и для инфракрасного излучения для всех длин волн возбуждения и углов наклона (все спектры представлены на рис. S4 раздела дополнительной информации.4). Следовательно, наблюдаемый инкремент излучения для видимого и инфракрасного диапазонов можно отнести к усилению рассеяния в образцах ННК, так как увеличиваются все полосы излучения, а не только резонансные.

Спектры ФЛ Er: Y 2 O 3 декорированные Si ННК при 15 °, полученные при длинах волн возбуждения 488 нм (красная линия) и 476 нм (синяя линия), показаны для обоих ( a ) видимого света. и ( b ) инфракрасный диапазон. На вставке ( a ) показана полоса излучения Er при 560 нм для длины волны непрямого возбуждения 476 нм.

Приращение эмиссии Er на ННК предполагает, что оптический отклик улучшается фрактальной структурой, настроенной по углу наклона. Чтобы сопоставить оптический отклик системы с лакунарностью фракталов, мы сравнили их лакунарность с соответствующими увеличениями ФЛ Er, как показано на рис. Фотолюминесценцию Er: Y 2 O 3 , осажденного на Si ННК и объем Si, измеряли с использованием следующих длин волн возбуждения 514 нм, 488 нм, 476 нм и 364 нм, и все спектры были нормированы на приобретение для сравнения.Для каждого осаждения коэффициенты усиления фотолюминесценции определялись как отношение интегральной интенсивности полосы излучения Er 560 нм, измеренной на Si ННК (I NWs ) по отношению к объему пленки на Si (пленка I ) и нормализованной для коэффициента масштабирования (f Er ), учитывающего разное количество излучающих Er центров, эффективно возбуждаемых на каждой длине волны возбуждения.

Нормализованные коэффициенты усиления ФЛ (EF) на исследуемый объем, рассчитанные для полосы излучения Er при 560 нм (красные точки), сравниваются с лакунарностью Er: Y 2 O 3 образец декорированных Si ННК при 5 ° ( a ), 10 ° ( b ), 15 ° ( c ).Сообщается, что EF декорированного образца под углом 15 ° умножается на 4, чтобы использовать одну и ту же произвольную шкалу усиления PL для всех образцов.

Что касается осаждения пленки Er на объем Si, все излучающие центры Er равномерно распределены по толщине около 160 нм для осаждения на плоский Si и, таким образом, все оптически возбуждаемы в исследуемом диапазоне длин волн возбуждения. Вместо этого концентрация Er вдоль украшенных Er: Y 2 O 3 Si ННК уменьшается от их вершины к основанию до 1.5 мкм для 15 ° (что также подтверждается анализом EDX), поэтому мы рассмотрели эффективную долю ионов Er, которая может быть исследована лазерным излучением.

Действительно, наше структурное исследование (приведенное в таблице) подтверждает, что ННК, украшенные Er: Y 2 O 3 , в основном состоят из 42% Si и процентного содержания Y 2 O 3 матрицы ( легированный 2% Er) в диапазоне от 34 до 27% в зависимости от угла осаждения от 5 ° до 15 °, следовательно, оставшаяся часть будет состоять из воздуха (примерно от 24 до 31%).Поскольку матрица Y 2 O 3 обладает высокой прозрачностью от 300 нм до всей видимой области, ее поглощением в декорированной фрактальной системе можно пренебречь. Поглощение 42% состава Si необходимо учитывать, особенно в УФ-области, где глубина проникновения света (δ p ) составляет около 27 нм для возбуждения 364 нм. И наоборот, для возбуждений 476 нм, 488 нм и 514 нм глубина проникновения света значительно выше и соответствует 1050 нм, 1190 нм и 1665 нм соответственно.

Мы можем оценить, что профиль Er расширяется до 1,10 мкм, 1,25 мкм и 1,5 мкм для осаждения при 5 °, 10 ° и 15 °, соответственно, с учетом неизменного общего содержания Er (подтвержденного RBS) и повышенные значения FF (см. таблицу). Таким образом, для всех углов осаждения можно предположить, что все ионы Er будут оптически возбудимы на длине волны 514 нм. Вместо этого на длинах волн 488, 476 и 364 нм глубина проникновения света ниже, чем протяженность ионов Er, и эффективная доля задействованных излучающих центров оценивалась при неизменном общем содержании Er.Поэтому мы оценили коэффициент усиления ФЛ как отношение полосы ФЛ эрбия 560 нм, измеренной на Si ННК (I NWs ) по отношению к объему (пленка I ) и нормированной на долю оптически активных центров для каждого возбуждения длина волны, как описано в следующем уравнении:

, где f Er = L Er / δ p с δ p глубина проникновения света и L Er удлинение профиля Er декорированного Образец Si ННК.

Для всех случаев, когда светопроницаемость превышает максимальное удлинение профиля Er, мы рассмотрели f Er = 1. Более подробное обсуждение масштабных коэффициентов приведено в дополнительной информации S4.

Коэффициенты усиления ФЛ для декора при 5 °, 10 ° и 15 ° представлены в виде красных точек и нанесены на график как функция эффективной длины волны падающего лазера, распространяющегося в среду λ eff (красная верхняя ось) на рис. a – c соответственно.Для каждого образца λ eff было получено по правилу смешивания Бруггемана, предполагая, что все образцы имеют одинаковый состав: 30% Si и 15% SiO 2 (измерено для чистых Si ННК) и разное процентное содержание воздуха. и Y 2 O 3 , измеренные по коэффициенту заполнения и подтвержденные анализом EDX (см. дополнительную информацию, раздел 4, таблица S1 ).

Тенденции увеличения ФЛ сравнивались с лакунарностью каждого образца, как показано на рис.а – в. Для всех исследованных образцов сообщается о хорошем совпадении тенденций увеличения ФЛ и лакунарности систем. Действительно, пик лакунарности определяет условия, при которых длина волны возбуждения лучше рассеивается внутри системы, тем самым увеличивая накачку возбуждения.

Эффективный диапазон длин волн (верхняя красная ось) сравнивается со шкалой длин лакунарности (нижняя черная ось) на рис. Эффективная длина волны (λ eff = λ / n ) немного отличается для каждого образца, поскольку n зависит от факторов заполнения (правило смешивания Бруггемана), а лакунарность зависит от флуктуации плотности пикселей (показателя преломления колебания) на разном масштабе длины, и не только от факторов заполнения.Следовательно, небольшие сдвиги EF не имеют значения, ожидается, что относительная модуляция EF следует за тем же изменением лакунарности. Действительно, максимальная флуктуация показателя преломления соответствует пику лакунарности, при котором многократное рассеяние по структуре максимизируется, как ранее было показано для не декорированного материала Si NW 12 . Как следствие, рассеяние увеличивает возбуждение Er, и EF будет вести себя так же, как лакунарность, как показано на рис..

Эти результаты предполагают, что фрактальная морфология, контролируемая осаждением методом наклонного распыления, приводит к увеличению эмиссии Er во фрактальных системах Si NW.

Высокоупорядоченные массивы кремниевых нанопроволок для фотоэлектрохимического выделения водорода: исследование влияния диаметра, длины и расстояния между проволоками

Вертикально ориентированные матричные фотокатоды из высокоупорядоченных кремниевых нанопроволок (SiNW) изготавливаются с использованием электронно-лучевой литографии с последующим глубоким реактивным ионным травлением (DRIE) Si.Систематически исследовалось влияние структурных параметров SiNW, включая диаметр проволоки, длину и расстояние между проволоками, на их фотоэлектрокаталитические характеристики выделения водорода. В исследуемом диапазоне размеров фотокатод из SiNW с диаметром проволоки 200 нм, длиной 1 мкм и расстоянием между проволоками 175 нм демонстрирует наилучшие характеристики, демонстрируя максимальную плотность насыщенного фототока 52 мА · см - 2 и потенциал начала (@ -1 мА см -2 ), равный -0.17 В по сравнению с обратимым водородным электродом . Эти структурированные литографией КНН с однородными структурными параметрами могут помочь установить незатененную взаимосвязь между структурой и активностью и облегчить конструкцию фотоэлектрода на основе Si.

У вас есть доступ к этой статье

Подождите, пока мы загрузим ваш контент... Что-то пошло не так. Попробуй еще раз?

Электрохимически контролируемое изготовление массивов слаболегированных пористых Si-нанопроволок с превосходными антиотражающими и самоочищающимися свойствами

Abstract

Уровень легирования и морфология массивов пористых Si-нанопроволок (SiNW) имеют решающее значение для их электрических, оптических и поверхностных свойств, но подготовка Создание массивов слаболегированных пористых КНН с постоянной длиной все еще остается проблемой.Путем интеграции химического химического травления с предложенным электрохимическим способом, легированные массивы монокристаллических пористых SiNW с однородной длиной были впервые получены из пластин Si с удельным сопротивлением 1–770 Ом · см. Изображения, полученные с помощью сканирующей электронной микроскопии и просвечивающей электронной микроскопии, показывают, что размер пор в ННК увеличивается за счет увеличения продолжительности электрохимического процесса. На основании вольт-амперных измерений предполагается, что за механизм порообразования отвечает термоэлектронная эмиссия.Спектр фотолюминесценции пористых КНН показывает очевидный пик с центром на 680 нм, который объясняется эффектом квантового ограничения, обусловленным пористыми структурами, о чем свидетельствует сдвиг пика комбинационного рассеяния с 520,7 до 519,7 см -1 . Спектры отражательной способности показывают, что средняя отражательная способность массивов КНН после электрохимической обработки была дополнительно снижена до менее 1,8% в диапазоне длин волн 350–600 нм. Измерения угла смачивания показывают, что массивы пористых КНН обладают супергидрофобными характеристиками с углом смачивания до 164 °.По сравнению с предыдущими исследованиями, предлагаемый интегрированный путь может не только приготовить однородные, слаболегированные и пористые массивы КНН, но также обеспечить эффективный способ независимого контроля длины ННК и размеров нанопор в них.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *