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

Objective-C

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

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

26.04.2013, 12:01. Просмотров 2550. Ответов 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     Указатели
Посмотрите здесь:

Указатели типа % - Objective-C
%d - integer %f - float напишите пожалуйста полный перечень этих указателей пожалуйста

Указатели - C++
Помогите. Код рабочей программы через простое обращение к массиву. нужно чтоб обращение было через адресацию с использованием (& *)...

Указатели - C++
Нужно очень срочно. 1. Дано целое n>2. Напечатать все простые числа из диапазона ; 2. Заданы 3 натуральных числа а,b,c которые...

Указатели - Free Pascal
Задание: Найти произведение второго и четвертого элементов, значение которых больше, чем 3. У меня иссякли идеи как решить. ...

Указатели - C++
Помогите плиз! Введите с клавиатуры данные в массив целого типа, а затем перепишите их значения в другой массив удвоенной размерности...

Указатели - C++
Наткнулся на вот такой цикл for (char p=str; *p!=(char)0; ++p) ,поясните пожалуйста что значит *p!=(char)0

Указатели - C++
1.Заданы три натуральных числа А, В, С, которые обозначают число, месяц и год. Найти порядковый номер даты, начиная отсчет с начала года. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korvin_
1712 / 1250 / 191
Регистрация: 28.04.2012
Сообщений: 4,528
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++
int k=5; int *ukaz; ukaz=&k; *ukaz=17; printf("%o\n",ukaz); printf("%o\n",k); system("pause"); Может, что то я делаю не...

Указатели!! - C++
Пользователь вводит строку с клавиатуры - предложение с пробелами и знаками пунктуации длиной до 100 символов. Вывести на экран все знаки...

Указатели С - C++
Объясните пожалуйста как получается что запись типа *(1+data) эквивалентна записи 1. Как из data получается *(1+data) и *(data+1)...

указатели - C++
Вот собственно код, проблема в том что я непойму как он работает, что именно непонятно указал в комментариях unsigned char **...


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

Или воспользуйтесь поиском по форуму:
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     Указатели
Ответ Создать тему
Опции темы

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