Глупости

38 отговора 1383 прегледа
#1

Глупости

Здравейте, пиша на Ц/Ц++ може ли да се укаже на променлива да не си сменя адреса, в смисъл при динамично заделяне на паметта. (по сяко време на изпълнение на програмата да си има един и същи адрес) И друго някой знае ли език в който е позволено масиви от reference, демек int& foo[иляда] да работи? Между другото любимите променливи са ми статик.

Отговор
в отговор на Mиkpoбyc #3

Re: Глупости

може

Отговор
в отговор на Mиkpoбyc #4

Re: Глупости

Между другото любимите променливи са ми статик

на мен па аутоматик, ама може и с ръчка

Сигнатура!
Отговор
в отговор на Questor #5

Re: Глупости

Бати клубъ

Отговор
в отговор на Mиkpoбyc #6

Re: Глупости

idata char RxBuffer[ RX_BUFSIZE ] _at( 0x80 );
Така RxBuffer е забит твърдо на адрес 0x80.

Bеer? Mоre?
Плацебото
Отговор
в отговор на Mиkpoбyc #7

Re: Глупости

И друго някой знае ли език в който е позволено масиви от reference, демек int& foo[иляда] да работи?

Вместо масив от референции ползвай масив от указатели. Ама я по добре кажи за какво ще го използваш ? Преди време, това се използваше за сортиране на масив, защото уж било по бързо, но освен заделяне на доп. памет ефект май нямаше.

#include <conio.h>
#include <stdio.h>

int main(int argc, char* argv[])
{int i,m[10],*pm[10];

for (i = 0; i < 10; i++) m = i;
for (i = 0; i < 10; i++)
{ pm = &m;
printf("\n%p %d",pm,*pm);
}
printf("\nPress a key");
getch();
return 0;
}

Отговор
в отговор на Veso #8

Re: Глупости

copy/paste нещо май сгафи за този ред:
for (i = 0; i < 10; i++) m = i;
вярното е :
for (i = 0; i < 10; i++) m = i;

Отговор
в отговор на Veso #9

Re: Глупости

Явно редактора на Дир-а не е благоразположен към С подобните езици, защото пак не се вижда правилно.
Вярното е m(i) = i

Отговор
в отговор на Veso #10

Re: Глупости

Не е копи/пейста - [ i ] е таг за италик, оставяй спейс между i и квадратните скоби и няма проблеми.

Отговор
в отговор на Veso #11

Re: Глупости

Батка, велик си. Три пъти настъпваш една и съща мотика. :)))

Отговор
в отговор на Paдo #12

Re: Глупости

Ще го имам в предвид

Отговор
в отговор на Paдo #13

Re: Глупости

Скромноста е мое присъщо качество, затова ще кажа : само 2 пъти

Отговор
в отговор на Veso #14

Re: Глупости

Нали затва питах да не мърда адреса че като пробвах с указател ми трябваше време да разбера що получавам тва дето не трябва за масив от референсе четох че не е принципно но е възможно да се създаде такъв език.

Отговор
в отговор на bira_more #15

Re: Глупости

Е жив да си дано да не ме лъжеш:)

Отговор
в отговор на Mиkpoбyc #16

Не те лъжа

това е код от реално приложение.
Само пропуснах малката подробност че става дума за Cygnal (8 битов процесор).
И за това има разни "странни" приставки като idat.

Bеer? Mоre?
Плацебото
Отговор
в отговор на Mиkpoбyc #17

Re: Глупости

Ако може да ти помогне това, че sizeof(int *) = 4 (за Win32) и че, указателите са разположени последователно - поне за масив от 10 указателя ....
А ако искаш да използваш един и същ начален адрес на масив от указатели ще трябва май да използваш онези гадни ф-ии HeapAlloc() / HeapFree() от Win32 API - ако пишеш за Вин

Отговор
в отговор на Mиkpoбyc #18

Re: Глупости

GlobalLock(), LocalLock(), VirtualLock() ?

Отговор
в отговор на Mиkpoбyc #19

Re: Глупости

abe sho ne obqsnish adjiba kvo ta ebe kyv e adresa na nqkva si promenliva?
da ne si mislish che data segmenta se mesti kato alokirash pamet A?

Отговор
в отговор на Mиkpoбyc #20

const

Очевидно все още не пишеш на C/C++, а се опитваш, затова като питаш се опитвай да обясниш не какво точно искаш да направиш, а малко по-глобално за да ти обяснят какво се прави. Иначе се получава като в оня виц за загубилия се пилот:
- Къде се намирам?
- В кабината на самолета.
Природата на & очевидно още ти е мъгла и не схващам за какво може да са ти хилада референса. Обясни какво искаш да правиш с тях за да ти кажа как се прави.

static е доста претоварена дума - може да значи клас памет, нещо невидимо извън модул ... Променливите могат да бъдат глобални, или в рамките на функция/клас и т.н.
Специално static променливите във функциите при C++ говорят за сериозна неграмотност. Прави се клас и му се дефинира оператор за функция с подходящите аргументи и връщана стойност. Ако направиш един глобален обект получаваш същия ефект. Предимството е, че можеш да имаш повече от един обект ако се наложи. Има предимства и при предаване като аргумент. Недостатъци няма.

Ако искаш на заделените елементи да не може да им се променя стойността не виждам как ще ги инициализираш. Иначе и за това си има начин. Затова предполагам, че искаш самия пойнтер да не може да се променя, за да не изтриеш после инкремената му стойност. Ми просто ползвай константа.

int main(int argc, char* argv[])

{
int * const memInt = new int[100];
int *pInt = memInt;
++pInt;
*pInt = 5;
memInt[6] = 42;

++memInt; // error C2166: l-value specifies const object
delete []memInt;

return 0;
}



System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор