|
использование пойнтера в прерывании, нуждаюсь в помощи |
|
|
|
 |
Ответов
|
Sep 29 2010, 13:01
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820

|
Цитата(MrYuran @ Sep 29 2010, 15:58)  static переменная? Это как? Я пока до таких высот не дошёл.
|
|
|
|
|
Sep 29 2010, 13:09
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820

|
Или подскажите, что вообще можно сделать с пойнтером. Как положить его значение в int и как произвольный int сделать пойнтером. Как-то в ассемблере с этим было попроще.
|
|
|
|
|
Sep 29 2010, 13:20
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820

|
что не получается: Пойнтер *P объявлен глобально, но создаётся впечатление, что при выходе из подпрограмма void Prog(char *P) он разрушается, т.к. из другой подпрограммы (в данном случае из обработчика прерывания) он не виден. Чисто теоретически это выглядит так: все операции с *P, типа *(P+i), P[i] внутри процедуры транслируются в команды косвенной адресации без сохранения значения пойнтера в каком-либо регистре. И я никак не могу сохранить или получить адрес String в глобальную переменную типа int, которую внутри прерывания можно было бы (если вообще можно?) использовать как пойнтер.
Имеется ввиду, можно ли сделать что-то типа int k; chap *P; k=P; .... char i=*k
Сообщение отредактировал 1921 - Sep 29 2010, 13:25
|
|
|
|
|
Sep 29 2010, 13:30
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(1921 @ Sep 29 2010, 17:20)  Имеется ввиду, можно ли сделать что-то типа int k; chap *P; k=P; Жирно выделенное вам компилятор сделать не позволит, т.к. это явное нарушение типов. Если char *k; k=P; то пожалуйста. Можно, конечно, вывернуться через ж.. и написать k=(int)P; (а лучше unsigned int), но это неправильно. То есть вы говорите компилятору: спокойно, я знаю, что делаю. И он съедает.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Sep 29 2010, 13:39
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820

|
Можно, конечно, вывернуться через ж.. и написать k=(int)P; (а лучше unsigned int), но это неправильно. То есть вы говорите компилятору: спокойно, я знаю, что делаю. И он съедает. [/quote] Ну что же. Плохо! транслятор похоже вообще, оперирую с пойнтерами, в качестве выхода имеет только значение, лежащее по адресу. Неужели нет никакой возможности получить сам адрес той строки, на которую ссылается пойнтер, если мы передаём ссылку на неё? операции типа char *P char k k=P идентичны k=P[0] и приводят к пересылке нулевого байта строки.
|
|
|
|
|
Sep 29 2010, 13:56
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(1921 @ Sep 29 2010, 17:39)  k=P идентичны k=P[0] и приводят к пересылке нулевого байта строки. Не может такого быть. Что за компилятор? Как минимум, выругаться должен.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
Сообщений в этой теме
1921 использование пойнтера в прерывании Sep 29 2010, 12:56  MrYuran Цитата(1921 @ Sep 29 2010, 17:01) Это как... Sep 29 2010, 13:08   MrYuran Цитата(1921 @ Sep 29 2010, 17:09) Или под... Sep 29 2010, 13:18    MrYuran Цитата(1921 @ Sep 29 2010, 17:20) Чисто т... Sep 29 2010, 13:25   1921 Я просто по пикам помню, там пойнтеры лежали в опр... Sep 29 2010, 13:28 rezident Я видимо как-то слабо улавливаю проблему, но если ... Sep 29 2010, 13:53 ih_ Цитата...Неужели нет никакой возможности получить ... Oct 26 2010, 13:10 Hoksmur Цитата(ih_ @ Oct 26 2010, 21:10) поинтер ... Oct 27 2010, 02:37 Сергей Борщ Цитата(Hoksmur @ Oct 27 2010, 05:37) Я хо... Oct 27 2010, 08:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|