поинтеры
я тут с поинтеами начал возитса и .....
кароче тут у меня кое кокое "недорозумение"
int a;
int *aPtr;
это int *aPtr, типо переменная которая может получать только значения адресов?
и тогда кокая разница между & и *.
и куда нам укажт или чего даёт *&aPtr и &*aPtr
блогодорю зарание
здарова мужики
я тут с поинтеами начал возитса и .....
кароче тут у меня кое кокое "недорозумение"
int a;
int *aPtr;
это int *aPtr, типо переменная которая может получать только значения адресов?
и тогда кокая разница между & и *.
и куда нам укажт или чего даёт *&aPtr и &*aPtr
блогодорю зарание
при твоём объявлении( int *aPtr; ) aPtr - это переменная, которая может хранить адрес участка памяти, содержащего значение типа int.
& - операция взятия адреса.
* - разыменование, то есть получение значения хранящегося по адресу.
a = *aPtr; // переменной a присваиваешь значение, хранящееся по адресу aPtr.
aPtr = &a; // в переменную aPtr записываешь адрес переменной a.
а вообще почитай лучше где-нибудь, литературы дофига, работа с динамической памятью.
а то я щас тут понапишу ещё больше запутаешься)
а вообще почитай лучше где-нибудь, литературы дофига, работа с динамической памятью.
а то я щас тут понапишу ещё больше запутаешься)
я вообшето этим и занемаюсь, сежу перед деителом и .....
а тебя то стоит отблогодорить прояснение этих малейших деталей было очень важно для меня.
это только начало, я тут пересмотрел с легка
тут ети ссылки и к масивам можно привезать и к функциям так что, я думаю что постепенно передо мной открываетса страна чудес.
Ну, удачи в освоении.
когда я дою функции масив следущим образом:
void add(int B[][12])
{
++B[0][0];
}
в main он конечно же выдаёт увеличенный B[0][0],
а вроди я на него не ссылался и тогда если я в место массива
дам функции переменную типа int :
void add(int a)
{
++a;
}
по идеи должно сработать но это не так.
что тут происходит:
если я дою: void add(int* B[12]) понятно
я ссылаю его а так:
void add(int B[][12]) ???????????????????????
вот тут то неразбериха:
когда я дою функции масив следущим образом:
void add(int B[][12])
{
++B[0][0];
}
в main он конечно же выдаёт увеличенный B[0][0],
а вроди я на него не ссылался и тогда если я в место массива
дам функции переменную типа int :
void add(int a)
{
++a;
}
по идеи должно сработать но это не так.
что тут происходит:
если я дою: void add(int* B[12]) понятно
я ссылаю его а так:
void add(int B[][12]) ???????????????????????
Не совсем понял, что ты хочешь.. Если тебе нужно увеличить переменную а, то объяви в функции передачу по адресу:
void add(int &a)
Не совсем понял, что ты хочешь.. Если тебе нужно увеличить переменную а, то объяви в функции передачу по адресу:
void add(int &a)
нет
как увеличить данную я то знаю, я хотел добратса до сути, если я передою int B[][12] по идее функциа должна же создать его копию а она прямо на эту переменную идёт
обявление: char* s;
пока я не присваиваю s начальное значение,
любое обращение к нему, функцией или оператором, приводит меня
к следующей фразе:
NullReferenceException: Object reference not set to an instance of an object.
вот опять :(
по моему этот язык не очень то любит поинтеры.
пишу такую вещ:
# include <iostream>
using namespace std;
class test{
public:
test (int=0);
void print() const;
private:
int x;
};
test::test(int value)
: x(value)
{
}
void test::print() const
{
cout<<" x=" <<x;
cout<<"\n this->x=" <<this->x;
cout<<"\n (*this).x=" <<(*this).x <<endl;
}
int mian()
{
test testobject(12);
testobject.print();
return 0;
}
с компиляцией проблем нет но когда дело идёт о выполнении дела вот что выдаёт:
LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
D:\My programs\deitel\examples\7.13\Debug\7.13.exe : fatal error LNK1120: 1 unresolved externals
нет
как увеличить данную я то знаю, я хотел добратса до сути, если я передою int B[][12] по идее функциа должна же создать его копию а она прямо на эту переменную идёт
массивы, в С по меньшей мере, и не только в С, передаются
по ссылке(адрессу). никаких копий. массив и указатель это
из одной истории.
когда речь идет о простой переменной (int а, char а, ...) то
такие переменные передаются по значению ( namefunction(a); )
а потом сделал такое объявление в main():
point *pptr;
pptr=&point;
и на вторую строчку в ответ получил:
error C2275: 'point' : illegal use of this type as an expression
что неверно?
я сам нашёл ошибку
нет
как увеличить данную я то знаю, я хотел добратса до сути, если я передою int B[][12] по идее функциа должна же создать его копию а она прямо на эту переменную идёт
Ну тут OlgaKr правильно сказала, массив - это и есть указатель. Поэтому передавая массив (а на самом деле указатель) получаешь доступ к его даным.
почемуто microsoft visual C++ не очень то любит
обявление: char* s;
пока я не присваиваю s начальное значение,
любое обращение к нему, функцией или оператором, приводит меня
к следующей фразе:
NullReferenceException: Object reference not set to an instance of an object.
Во первых microsoft visual C++ тут не причем - это всего лишь инструмент. А ведет он себя вполне стандартно в этой ситуации.
А во вторых что же ты хочешь получить обращаясь к непроинициализированному указателю? Он указывает неизвестно куда (или в лучшем случае равен нулю), и обращатся к нему не имеет смысла просто, пока не проинициализировать его конкретным адресом.
мдаааааа
вот опять
по моему этот язык не очень то любит поинтеры.
пишу такую вещ:
Указатели тут не причем. У тебя названия неправильно неписанны - учись уже читать свой код.
Например не void test:rint() const, а print
И конечно не int mian(), а main
Собственно на это у тебя линкер и ругается - не может найти функцию main с которой начинается выполнение, вместо нее описанна функция mian =))
И еще - учись код по человечески оформлять. Придумывать понятные и сответсвующие своим функциям идентификаторы, классы например с большой буквы писать и т.п.
Самому понятней будет.
я создал класс point
а потом сделал такое объявление в main():
point *pptr;
pptr=&point;
и на вторую строчку в ответ получил:
error C2275: 'point' : illegal use of this type as an expression
point - это тип.
& - в данном контексте, оператор взятия адреса у переменной. Тоесть там должна быть переменная, а не тип. Какой адрес то у типа брать? =)
Тоесть правильно будет так:
...
point *pptr;
pptr=&pval;