С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ann Joker
3 / 3 / 1
Регистрация: 05.10.2011
Сообщений: 86
#1

Pointer. Int * - C++

26.11.2011, 11:36. Просмотров 840. Ответов 11
Метки нет (Все метки)

Создать функцию, которая находит максимальное значение из 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;
}
помогите решить и если не сложно, объясните как работать с интеджерами.

заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 11:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Pointer. Int * (C++):

Shared_ptr - stored pointer, owned pointer - C++
Зачем в shared_ptr нужен хранимый указатель, отличный от владеемого? И так в этом средстве, вроде как предназначенном для уменьшения...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5 #define col 5 using namespace...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.

[Linker error] undefined reference to `sterling(int, int, int)' - C++
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int sterling(int); int main() { ...

[Linker Error] Unresolved external 'Sort(int near*near ,int, int) - C++
не могу понять в чем ошибка при компиляции ошибок не выдает при запуске программы - выдает эту ошибку Unresolved external 'Sort(int...

11
-=ЮрА=-
Заблокирован
Автор FAQ
26.11.2011, 12:30 #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 * массиве)
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.11.2011, 12:48 #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
cout<<strlen(str)<<endl;
strlen будет идти по байтам, пока не встретит нулевой байт, а встретит она его сразу же
потому как 48 типа int, в двоичном представлении это: 00000000000000000000000000110000
если int 4-ех байтовый
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
26.11.2011, 13:13 #4
-=ЮрА=-, Лол, что? один инт будет соответствовать sizeof(int) символов char. И судя по тому, что первый(по индексу) будет символ будет с кодом 0 - символ конца строки. Строка будет не очень длинная)

Добавлено через 6 минут
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
strlen будет идти по байтам, пока не встретит нулевой байт, а встретит она его сразу же
То что использовать нельзя strlen() это ясно. Но вроде как идет обратный порядок бит, и символ конца строки будет вторым.
1
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.11.2011, 13:23 #5
Цитата Сообщение от KuKu Посмотреть сообщение
То что использовать нельзя strlen() это ясно. Но вроде как идет обратный порядок бит, и символ конца строки будет вторым.
порядок байт
1
-=ЮрА=-
Заблокирован
Автор FAQ
27.11.2011, 11:28 #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, не обсуждай мои коды, а предлагай решения, уровень состоит не в обсуждении а в помощи

0
Миниатюры
Pointer. Int *  
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
27.11.2011, 13:39 #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 выдал то, что надо)). И работа с массивом интов тут ваще не причем.
1
-=ЮрА=-
27.11.2011, 17:35
  #8

Не по теме:

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

0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
27.11.2011, 18:20 #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.
0
-=ЮрА=-
27.11.2011, 18:24
  #10

Не по теме:

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

0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
27.11.2011, 18:26 #11
Цитата Сообщение от KuKu Посмотреть сообщение
Но вроде как идет обратный порядок бит,
Во первых байт, а во вторых есть камни и с прямым порядком а не толь с обратным.
0
KuKu
1558 / 1036 / 78
Регистрация: 17.04.2009
Сообщений: 2,988
27.11.2011, 18:40 #12
Что бы я без вас делал)
0
27.11.2011, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 18:40
Привет! Вот еще темы с ответами:

int main() и int _tmain(int argc, _TCHAR* argv[]) - C++
При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include &quot;stdafx.h&quot; int...

delete[] *pointer vs. delete pointer и утечка памяти - C++
Здравствуйте! Есть класс &quot;умного&quot; указателя counted_ptr, который удаляет хранящийся в нём T* owned; только если кол-во владельцев...

Функции float average(int arrray[],int from,int to) - C++
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции должно быть среднее значение элементов...

Написать функцию типа Beaty(int iA, int iB, int *pc) - C++
Задание: Написать функцию типа Beaty(int iA, int iB, int *pc); для выражения (iA+iB)/(iA*iB). Помогите решить!


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

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

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