Ақпарат

Cat c6 4 acert қозғалтқышы

Cat c6 4 acert қозғалтқышы


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Cat c6 4 acert қозғалтқышы 4.2 8

3cat c5 4 mack қозғалтқышы 4.2 8

1cat c5 3,9 dfe 11

2cat c5 4 mack қозғалтқышы 4.2 8

2cat c5 3,9 dfe 11

3cat c6 4.2 8

4cat c6 4.2 8

3cat c6 4.2 8

4cat c6 4.2 8

4cat c6 4.2 8

Міне, менің кодыммен не істеуге тырысамын:

үшін(мысық = 0, мысық<,4, мысық++){

үшін(i=0, i<,5, i++){

cout <,<, cat <,<, ":" <,<, " | " <,<, i <,<, " : " <,<, " " <,<, (i+1) <,< , " | " <,<, my_array[i] <,<, " | " <,<, my_array[i+1] <,<, endl,

}

}

Бұл мен алатын қате:

қате: 'std::array<, unsigned short түріндегі тұрақты емес мән сілтемесі,

1ul>,' 'const unsigned short *' түріндегі уақытша байланыстыру мүмкін емес

Мен my_array const массивін жариялауға тырыстым, бірақ мен бұл қатені аламын.

Мен массивімді қалай тұрақты етіп жасай аламын және массивімді өзгертпей оны қайталай аламын?

A:

Мен my_array const массивін жариялауға тырыстым, бірақ мен бұл қатені аламын

@John Fultz және @Krishna анықтаған мәселеге байланысты көрсеткішке сілтеме алып, оның мәнін өзгертпестен өзгерте алмайсыз. Жиым элементтерін өзгертпес бұрын көшіріп алып, көшірмені қайтару керек.

Мен массивімді қалай тұрақты етіп жасай аламын және массивімді өзгертпей оны қайталай аламын?

std::array<,...>,::cbegin(), std::array<,...>,::cend(), пайдаланыңыз.

std::array<,...>,::data(), std::array<,...>,::at(index), std::array<,...>,::begin(), std ::array<,...>,::end() немесе std::array<,...>,::value_type{}.

шаблон<,std::size_t SIZE>,

std::array<,signed short, SIZE>, cat_array(imsigned short*&, my_array){

қолтаңбасы жоқ қысқа* мысық = менің_массивім,

for(int i=0, i<,5, i++){

мысық[i] = 10,

}

return std::array<, unsigned short, SIZE>,{

мысық

},

}

Егер біз массивке көрсеткішті жариялап, көрсеткіш арифметикасын пайдаланып сол массив элементтерін өзгертуге тырыссақ, мінез-құлық іске асыру арқылы анықталады. Нысанның бастапқы мәндерінің сақталуы немесе сақталмауы анықталмаған. Келесі мысал оны көрсетеді:

int* p,

int const my_array[] = {0,1,2,3,4},

const int my_const_array[] = {0,1,2,3,4},

p = &,менің_массивім,

*p = 5, // Бұл жұмыс істейді.

p = &,менің_конст_жиымы,

*p = 5, // Бұлай емес.

A:

Бұл сұрақтың жауабы көрсеткіштің қалай өзгертілетініне байланысты.

Егер көрсеткіш мән бойынша функцияға берілсе, көрсеткіш мәні кейін өзгертілетін функция аргументіне көшіріледі. Осылайша, массивтегі барлық көрсеткіштер өзгертіледі. Бұл өзгерту басқа нысанды көрсететін көрсеткішке әсер етеді.

Көрсеткіш сілтеме арқылы берілсе, көрсеткіштің өзі жіберіледі. Осылайша функциядағы көрсеткіш айнымалысы бастапқы жадқа қол жеткізе алады. Бірақ ол жадтың мазмұнын өзгерте алмайды, себебі ол тек аргумент мәні ретінде жадқа сілтеме жасайды.

A:

Сізде келесідей код бар делік:

int *массив[5],

for(int i = 0, i <, 5, ++i)

массив[i] = i,

Өздеріңіз білетіндей, бұл код, мысалы, құрастыруға құрастырылған кезде, компилятор кірістірілген функция немесе циклды шығару сияқты кейбір оңтайландыруды жасайды. Компилятор алаптың мәнін орнында өзгерте алады.

Егер сізде const int *array[5] болса,

Бұл келесідей функцияға қолданылмайды:

void foo(const int *a)

{

int *b = a,

b[1] = 9,

}

себебі бұл мысалда компилятор функция денесін кірістіре алмайды және a көшірмесін жасауы керек. Бірақ компилятор сіздің кодыңыздың бірінші циклін кірістіруі мүмкін.

Егер сізде const int *array[5] болса және көрсеткіш мән бойынша берілсе, онда функцияны шақыру кезінде көшіру конструкторы немесе жылжыту конструкторы әрқашан шақырылады. Компилятор бірінші for циклін де кірістіруі мүмкін.

Егер сізде const int *array[5] болса және көрсеткіш сілтеме арқылы берілсе, онда массивтің көшірмесі болады. Сіз массивтің мекенжайын беруді қарастырғыңыз келуі мүмкін.

Көріп отырғаныңыздай, компилятор функцияны шақыру контекстіне байланысты әртүрлі ережелерді қолданады, сондықтан компилятор дұрыс таңдау жасай алатындай функцияның қайтару түрі толық анықталуы керек. С стандарты 6.9.3.2 6-параграфта мынаны айтады:

Функция (6.2.2) шақырылғанда, егер функция a болмаса

виртуалды функциялары бар класс мүшесі, шақырылатын функция

арнайы стек жақтауының болуына кепілдік беріледі.

Сонымен, сіздің нақты кодыңызда сіз foo-ны бірнеше рет шақыра аласыз, бұл сізде массивтің көшірмесі болатынына көз жеткізеді. Бірақ бұл сұраққа жіберген кодта болмайды, сондықтан массивте ешқандай мән орнатылмайды.

Басқа жағдайларда қоңырау шалушы функцияны тек оқуға арналған әрекеттер үшін пайдалана алады және компилятор функцияңызды кірістірсе, массив тек оқуға арналған болуы мүмкін. Мысалы, егер сіз жасасаңыз


Бейнені қараңыз: Cat. как выставить насос по меткам (Мамыр 2022).

Video, Sitemap-Video, Sitemap-Videos