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

Objective-C

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

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

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

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

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

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
korvin_
1832 / 1301 / 202
Регистрация: 28.04.2012
Сообщений: 4,688
26.04.2013, 14:18 #2
Цитата Сообщение от jude Посмотреть сообщение
Но почему значение нужно выводить без звездочки?
Вероятно потому, что NSString -- это класс, у которого определен соответствующий метод форматирования.
1
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
26.04.2013, 14:31 #3
потому что строка это не строка вовсе, а объект

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

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

%f
%d
и прочее
1
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); //значение переменной
Или у меня неправильное понимание?
0
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"
1
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"? Указатель же должен быть равен адресу в памяти.
0
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
26.04.2013, 19:01 #7
то почему он равен строке @"test" Указатель же должен быть равен адресу в памяти.
сами себе противоречите


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

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

синтаксис все-таки относится к СИ подобным языкам и в основу принят язык СИ, вот именно оттуда берут начало указатели звездочки, и прочее
1
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;
Т.е. это уже указатель.
3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2013, 12:03
Привет! Вот еще темы с ответами:

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include <iostream> #include <conio.h> #include <string> using namespace std; //Сортировка "пузырьком". ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2013, 12:03
Ответ Создать тему
Опции темы

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