В массиве C++ ничего не печатается

Я новичок в С++. Обычно я программирую на C #, поэтому у меня проблемы с массивами и циклами. Когда я пытаюсь распечатать содержимое динамического массива с помощью цикла, он говорит, что запрошенная область повреждена... Например, я дам ему распознать условие, используемое с содержимым массива, но не распечатаю его содержимое :

// Array.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
    int size=3;
    int *p;
    int myarray[10];
    myarray[3]=4;
    p=new int[size];
    p[2]=3;
    if(myarray[3]==4){
        cout << myarray[3] +"/n";
        cout << "Why?";
    }
    else
        cout << "Not equal " << endl;
    cin.get();
    delete [] p;
}
-. 121 ---849301- LUA :Поиск эффективных и свободных от ошибок -способов назначения аргументов по умолчанию Вместо использования длинных списков аргументов в определениях функций я предпочитаю передавать несколько фиксированных параметров и таблицу «дополнительных параметров», например :function :doit (text, params )конец Это...

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

function:doit( text, params )
end

Это хорошо, так как позволяет мне добавлять новые именованные параметры позже, не нарушая старые вызовы.

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

function:doit( text, params )
   local font     = params.font or native.systemBold 
   local fontSize = params.fontSize or 24
   local emboss   = params.emboss or true

   --...

end

. Приведенный выше код отлично работает во всех случаях, за исключением случаев, когда я передал «false» для тиснения :

doit( "Test text", { fontSize = 32, emboss = false } )

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

Чтобы было ясно, я хочу, чтобы первое значение, отличное от -NIL, было присвоено тиснению, вместо этого я получаю первое значение, отличное от -false, и не -NIL.

Чтобы справиться с этой проблемой, я написал небольшой фрагмент кода, чтобы найти первое значение, отличное от -NIL, в таблице и вернуть его :

function firstNotNil(... )
   for i = 1, #arg do
      local theArg = arg[i]
      if(theArg ~= nil) then return theArg end
   end
   return nil
end

. Используя эту функцию, я бы -записал назначение тиснения следующим образом:

   local emboss   = firstNotNil(params.emboss, true)

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

Пожалуйста, обратите внимание :Я нашел эту рубиновую конструкцию, которая выглядела многообещающе, и я надеюсь, что в lua есть что-то подобное:

[c,b,a].detect { |i| i > 0 } -- Assign first non-zero in order: c,b,a
5
задан Ed Maurina 2 July 2012 в 17:53
поделиться