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

Pointer. Int * - C++

Войти
Регистрация
Восстановить пароль
 
Ann Joker
 Аватар для Ann Joker
3 / 3 / 1
Регистрация: 05.10.2011
Сообщений: 86
26.11.2011, 11:36     Pointer. Int * #1
Создать функцию, которая находит максимальное значение из int *a pointer (подсказка: используйте *a pointer как динамичный массив, также используйте strlen() для размера массива.

я научилась пользоваться поитером из чаров более менее, а вот интеджеры для меня все еще не понятны. вот, как вижу решение я, но оно от корня неправильное.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
void max(int s){
    for (int i = 0; i < s; i ++){
        cin >> *(p + i);
    }
}
 
int main (){
    int *p;
 
    int s = strlen(p);
    max(s);
    return 0;
}
помогите решить и если не сложно, объясните как работать с интеджерами.

заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 11:36     Pointer. Int *
Посмотрите здесь:

C++ error C2664: InputMatrixCurrent: невозможно преобразовать параметр 1 из 'int [5][5]' в 'int'
C++ Ошибка - перегруженность pow(int,int) неосуществима. Как исправить?
Ошибка:unresolved external 'My<int>::My<int>(int)' unresolved external 'My<int>::~My<int>' C++
C++ error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл
C++ [Linker Error] Unresolved external 'Sort(int, int)' referenced from H:\INFORMATIC\5\UNIT1.OBJ
C++ Написать функцию SUM (int M, int N) / С++ для начинающих
в Visual Studio пишет: отсутствует спецификатор типа-предполагается int.C++ не поддерживает int по умолчанию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
26.11.2011, 12:30     Pointer. Int * #2
Ann Joker,
C++
1
2
3
4
int int_mas[] = {48,49,50,51,52,53};
char * str = (char *)int_mass;
cout<<str<<endl;
cout<<strlen(str)<<endl;
Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(char *)int_mass;
- это преобразование из int * в char *
на пальцах - из целочисленного массива делаем строку (строка образуется из символов соответсвующих кодом ASCII величинам элементов в int * массиве)
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.11.2011, 12:48     Pointer. Int * #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cout<<strlen(str)<<endl;
strlen будет идти по байтам, пока не встретит нулевой байт, а встретит она его сразу же
потому как 48 типа int, в двоичном представлении это: 00000000000000000000000000110000
если int 4-ех байтовый
KuKu
 Аватар для KuKu
1545 / 1023 / 69
Регистрация: 17.04.2009
Сообщений: 2,957
26.11.2011, 13:13     Pointer. Int * #4
-=ЮрА=-, Лол, что? один инт будет соответствовать sizeof(int) символов char. И судя по тому, что первый(по индексу) будет символ будет с кодом 0 - символ конца строки. Строка будет не очень длинная)

Добавлено через 6 минут
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
strlen будет идти по байтам, пока не встретит нулевой байт, а встретит она его сразу же
То что использовать нельзя strlen() это ясно. Но вроде как идет обратный порядок бит, и символ конца строки будет вторым.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.11.2011, 13:23     Pointer. Int * #5
Цитата Сообщение от KuKu Посмотреть сообщение
То что использовать нельзя strlen() это ясно. Но вроде как идет обратный порядок бит, и символ конца строки будет вторым.
порядок байт
-=ЮрА=-
Заблокирован
Автор FAQ
27.11.2011, 11:28     Pointer. Int * #6
KuKu, смотри, да я вчера просто в блокноте форума написал, ниже как надо уже
Цитата Сообщение от KuKu Посмотреть сообщение
То что использовать нельзя strlen() это ясно
- вот именно не ясно!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    void * lpBuf = (void *)"YurA";
    int * int_mass = (int *)lpBuf;
    char *str = (char *)int_mass;
    cout<<str<<endl;
    cout<<strlen(str)<<endl;
    system("pause");
    return 0;
}

Не по теме:

Net_Wanderer, не обсуждай мои коды, а предлагай решения, уровень состоит не в обсуждении а в помощи

Миниатюры
Pointer. Int *  
KuKu
 Аватар для KuKu
1545 / 1023 / 69
Регистрация: 17.04.2009
Сообщений: 2,957
27.11.2011, 13:39     Pointer. Int * #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
void * lpBuf = (void *)"YurA";
 int * int_mass = (int *)lpBuf;
 char *str = (char *)int_mass;
И в чем смысл этой маниуляции char* в void*, void* в int* и int* в char*? Это прям такая неожиданность, strlen выдал то, что надо)). И работа с массивом интов тут ваще не причем.
-=ЮрА=-
27.11.2011, 17:35
  #8

Не по теме:

Цитата Сообщение от KuKu Посмотреть сообщение
Это прям такая неожиданность, strlen выдал то, что надо
- думается простая земная зависть от того что кто-то знает как из инта_ptr чар_ptr получить. а кто то нет вот и всё...
Цитирую слова
Цитата Сообщение от KuKu Посмотреть сообщение
Лол, что? один инт будет соответствовать sizeof(int) символов char
как оказалось вполне реально работать с указателем

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.11.2011, 18:20     Pointer. Int * #9
Цитата Сообщение от Ann Joker Посмотреть сообщение
strlen() для размера массива.
Для размера массива интов? На сколько мне известно, strlen считает charы. Кроме того, чтоб его использовать, в конце массива должен быть терминальный ноль.

Добавлено через 7 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(строка образуется из символов соответсвующих кодом ASCII величинам элементов в int * массиве)
Бред. У этих типов не совместимая разрядность, и чтоб из значений целых интов получить charы, надо преобразовать саму строку, для этого нужен цикл, а не оператор приведения типа. А
C++
1
(char *)a;
приводит только указатель, причем без фактического преобразования. И ещё. Предположим, попадётся инт, равный 1040. Первый байт 0, второй 0, третий 4, четвёртый 16. Первый байт этой чётверки будет принят за терминальный. strlen не поймает ложный терминальный ноль только в том случае, когда все инты строго больше 16843008. А при обратном порядке байт в инте 1040 даст первый байт 16, второй 4, третий 0, четвёртый 0.
-=ЮрА=-
27.11.2011, 18:24
  #10

Не по теме:

taras atavin, читай хоть иногда что пишут - достал своей глупостью даже говорить не хочу...Есть код разбирайся, сложно - читай книги...

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.11.2011, 18:26     Pointer. Int * #11
Цитата Сообщение от KuKu Посмотреть сообщение
Но вроде как идет обратный порядок бит,
Во первых байт, а во вторых есть камни и с прямым порядком а не толь с обратным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 18:40     Pointer. Int *
Еще ссылки по теме:

Что означает int pos = 0; int value = 5; в данном коде? C++
C++ Что это такое int (*func4 (void)(int)
Error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++
C++ Почему при умножении разнотипных переменных (например, float и int) получается int?
C++ Правильное объявление переменной с точки зрения стиля [int *a vs int* a]

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

Или воспользуйтесь поиском по форуму:
KuKu
 Аватар для KuKu
1545 / 1023 / 69
Регистрация: 17.04.2009
Сообщений: 2,957
27.11.2011, 18:40     Pointer. Int * #12
Что бы я без вас делал)
Yandex
Объявления
27.11.2011, 18:40     Pointer. Int *
Ответ Создать тему
Опции темы

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