0

what is difference?why mistake?//ответ по русский не помешает:)

int var = 50; int *p; *p = &var;//instead p=&var int var = 50;//this is valid int *p= &var; //

24th Feb 2018, 10:08 AM
Coder21
Coder21 - avatar
3 Antworten
+ 8
int *p; It's a common mistake to assume *p as the variable name. But here int * (integer pointer) is the DATA TYPE and p is the variable. That means, p is a variable which points to an integer. In other words, p holds memory address of an integer. Remember two important concepts: 1) *p = content of the memory address which is stored in p 2) &var = memory address of var Example: say var = 50 and var's memory address is 202440300 p = &var; // p = 202440300 printf("%d", *p); // prints content at 202440300, that means 50 Now, let's trace your code line by line: First code: ------------- int var = 50; int *p; // You're declaring p (not *p) here as an (int *) variable *p = &var; // content of p's held address = address of var (mistake) If you print *p, you'll get garbage value. p = &var; // this assignment will give you your desired output. Second code: ---------------- int var = 50; // declaration and initialization together int *p= &var; // similar to int *p; p = &var; // p = memory address of var (makes sense) If you print *p now, you'll get 50
24th Feb 2018, 11:55 AM
Shamima Yasmin
Shamima Yasmin - avatar
+ 1
Это ньюанс синтаксиса работы с указателями, который часто доставляет проблемы новичкам. Суть в том, что есть 3 отдельных случая: 1) Объявление указателя: int *p 2) Разименование указателя: *р 3) Получение адреса переменной: &а Что в первом, что во втором случае используется символ '*'. Но его значение совсем разное. В первом случае * просто указывает, что объявляется "указатель" на int. Во втором случае * означает "значение, на которое указывает указатель", то есть операция обратная "&" - получение значения по адресу. Разберём первый пример: // объявить переменную var типа int int var = 50; // объявить указатель на int p int *p; // в значение, на которое указывает р, записать адрес var *p = &var; Здесь, в последней строке, адрес переменной var записывается в "значение", на которое указывает р, а не в сам указатель. Разименование указателя (*) здесь лишнее. Нельзя непосредственно записывать адрес в int. Второй пример: // объявить var типа int и инициализировать ее значением 50 int var = 50; // объявить указатель на int p, инициализировать его адресом переменной var int *p = &var; Здесь все нормально. '*' в последней строке - это не разименование а просто объявление указателя. В общем, синтаксис работы с указателями в С++ может показаться немного запутанным по началу, но с практикой, к нему привыкаешь.
24th Feb 2018, 11:48 AM
deFault
+ 1
спасибо огромное♡...@Marvin thanks a lot♡...@Shamima Yasmin
24th Feb 2018, 11:57 AM
Coder21
Coder21 - avatar