VZVZ: Зависит от массивов. В лучшем случае за 1 проход (линейная сложность) против N проходов, в худшем — N/2 прохода, если я правильно посчитал (квадратичная) против одного.
А если OpenMP по какой-то непонятной причине использовать не получается, тогда С++11 и std::thread/std::async. Хотя это для вашего случая похоже на закат солнца вручную.
Аргументы правой части могут быть вычислены только после того как левая полностью вычислена, её побочные эффекты выполнены и результат левой части 0. Между левой и правой частью sequence point. Код sink(print(1)) || sink(print(2)) может вывести на экран только 12 или 1 в зависимости от значения, которое вернул первый вызов sink.
Статья упоминает string только потому, что она рассчитана на С++. Работа с потоками со времён С не поменялась. Та же проблема со scanf/другими функциями.
Antony: Так нельзя делать нигде. Пункт 8.3.4/1 стандарта. Нужно не путать объявление массива с похожим выделением памяти под массив массива через new-expression, хотя оно и здесь бы не сработало: только внешний массив может быть с переменной длиной.
amalchikov: arr это имя массива, которое трансформируется в указатель на первый элемент. Значение которое вы видите это разница между указателем на элемент и указателем на первый элемент, ака количество элементов между ними или номер элемента. Адрес выводится, потому что ptr это указатель, ака адрес переменной.
vovkaooo1: Хочу ещё заметить что поддержка С в Visual Studio оставляет желать лучшего. Даже С99 не реализован полностью. С поддерживается остаточно, после С++.