Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 192
1

Указатели

26.04.2013, 12:01. Просмотров 2830. Ответов 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
Ответы с готовыми решениями:

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

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

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье....

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

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip>...

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

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

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

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


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

@"test" тоже не строка -- это указатель на строку
1
jude
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 192
27.04.2013, 10:50  [ТС] 8
Цитата Сообщение от alexpac26 Посмотреть сообщение
C
1
id string = @"test";
в данном случаем объявляем "нетипизированный указатель" string и присваиваем его адресу объект @"test"
Ок, а почему у нетипированннго указателя не ставится звездочка?
0
alexpac26
14 / 22 / 4
Регистрация: 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
27.04.2013, 12:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2013, 12:03

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

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

Написать программу сортировки через указатели на указатели
Вот моя программа #include <iostream> #include <conio.h> #include <string>...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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