Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 190
#1

Указатели - Objective-C

26.04.2013, 12:01. Просмотров 2491. Ответов 9
Метки нет (Все метки)

Добрый день! У меня вопрос по указателям. Вот я создаю указатель на целое число.
C
1
int *y;
Задаю ему какое-то значение. Потом вывожу значение так:
C
1
NSLog(@"%i", *y);
Вот я создаю указатель на строку
C
1
NSString *string;
Но почему значение нужно выводить без звездочки?
C
1
NSLog(@"%@", string)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 12:01     Указатели
Посмотрите здесь:

C++ Через указатели на указатели посчитать сумму двух чисел и записать в третье
Указатели типа % Objective-C
Указатели и указатели на указатели, а также типы данных C++
C++ Написать программу сортировки через указатели на указатели
Указатели и массивы. Указатели и функции C++
Указатели на массивы. Указатели и функции C++
C++ Указатели на слонов или А зачем нужны указатели?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korvin_
1659 / 1197 / 181
Регистрация: 28.04.2012
Сообщений: 4,337
26.04.2013, 14:18     Указатели #2
Цитата Сообщение от jude Посмотреть сообщение
Но почему значение нужно выводить без звездочки?
Вероятно потому, что NSString -- это класс, у которого определен соответствующий метод форматирования.
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
26.04.2013, 14:31     Указатели #3
потому что строка это не строка вовсе, а объект

все "объектые" типы нужно выводить в NSLog через %@

остальные типы float int и прочее только через спец формат

%f
%d
и прочее
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 190
26.04.2013, 17:17  [ТС]     Указатели #4
Я правильно понимаю, что в случае с NSString создается одновременно и указатель и значение объекта? А в случае c int нужно отдельно создавать объект и отдельно указатель? На примере кода будет выглядеть так :
C
1
2
3
4
5
6
7
8
NSString *string = @"test"; //указатель + значение переменной
NSLog(@"%p", string); //указатель
NSLog(@"%@", string); //значение переменной
    
int y = 5;
int *pointerY = &y; 
NSLog(@"%p", &pointerY); //указатель
NSLog(@"%i", y); //значение переменной
Или у меня неправильное понимание?
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
26.04.2013, 17:32     Указатели #5
Objective-C
1
@"test"
- выделяем память под объект класса NSString и записываем туда test

Objective-C
1
NSString *string
- объявляем переменную типа "указатель на NSString" или "типизированный указатель"

Objective-C
1
NSString *string = @"test"
приваиваем переменной типа "указатель на NSString" указатель на объект @"test"

то есть работаем с указателями

вот эта запись эквивалентна NSString *string = @"test"

Objective-C
1
id string = @"test";
в данном случаем объявляем "нетипизированный указатель" string и присваиваем его адресу объекта @"test"
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 190
26.04.2013, 18:46  [ТС]     Указатели #6
Цитата Сообщение от alexpac26 Посмотреть сообщение
Objective-C
1
@"test"
- выделяем память под объект класса NSString и записываем туда test

Objective-C
1
NSString *string
- объявляем переменную типа "указатель на NSString" или "типизированный указатель"

Objective-C
1
NSString *string = @"test"
приваиваем переменной типа "указатель на NSString" указатель на объект @"test"

то есть работаем с указателями

вот эта запись эквивалентна NSString *string = @"test"

Objective-C
1
id string = @"test";
в данном случаем объявляем "нетипизированный указатель" string и присваиваем его адресу объекта @"test"
Спасибо, доходчиво! Один момент осталось понять . Если string - это указатель, то почему он равен строке @"test"? Указатель же должен быть равен адресу в памяти.
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
26.04.2013, 19:01     Указатели #7
то почему он равен строке @"test" Указатель же должен быть равен адресу в памяти.
сами себе противоречите


NSString *string это не строка -- это указатель на строку

@"test" тоже не строка -- это указатель на строку
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 190
27.04.2013, 10:50  [ТС]     Указатели #8
Цитата Сообщение от alexpac26 Посмотреть сообщение
C
1
id string = @"test";
в данном случаем объявляем "нетипизированный указатель" string и присваиваем его адресу объект @"test"
Ок, а почему у нетипированннго указателя не ставится звездочка?
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
27.04.2013, 11:31     Указатели #9
Ок, а почему у нетипированннго указателя не ставится звездочка
потому что гладиолус

синтаксис все-таки относится к СИ подобным языкам и в основу принят язык СИ, вот именно оттуда берут начало указатели звездочки, и прочее
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2013, 12:03     Указатели
Еще ссылки по теме:

Отсортировать массив и вывести на экран (массивы и указатели на указатели) C++
C++ Константные указатели и указатели на константу
Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? C++
C++ Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Используются ли на практике указатели на указатели объектов? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
27.04.2013, 12:03     Указатели #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Причина не только в гладиолусе. А еще и в объявлении типа id:
Objective-C
1
2
3
4
typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;
Т.е. это уже указатель.
Yandex
Объявления
27.04.2013, 12:03     Указатели
Ответ Создать тему
Опции темы

Текущее время: 00:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru