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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
#1

Различия между двумя циклами - C++

19.06.2011, 15:31. Просмотров 1391. Ответов 20
Метки нет (Все метки)

объясните различия между двумя следующими циклами while

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main ()
{
    const char *cp="hello";
    int cnt=0;
 
    while(cp){++cnt; ++cp;}
    while(*cp){++cnt; ++cp;}
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 15:31     Различия между двумя циклами
Посмотрите здесь:

Степень всеми циклами и двумя рекурсиями - C++
#include &lt;iostream.h&gt; double degree1(double A, signed int n); double degree1(double A, unsigned int n); double degree2(double A,...

Различия между #define и const - C++
Собственно вопрос: в чем различия и что лучше использовать? Хотелось бы получить развернутый ответ со всеми &quot;pros and cons&quot;.

scanf (какие различия между %f %g %e) - C++
Есть вопрос по функции scanf, а именно про спецификации формата. %f - читает число с плавающей точкой. %g - читает число с плавающей...

Различия в скоростях между curl и libcurl - C++
Качаю определенный файл через curl curl -O http://myhost.ru/myfile.txt Потом качаю через свою утилиту. #include &lt;stdio.h&gt; ...

Различия между модульным и ООП программированием - C++
Привет, кто может в двух словах обьяснить различия между модульным и ООП программированием? Спасибо.

В чем различия между модульным, процедурным и структурным программированием? - C++
Доброго всем времени суток. Объясните, пожалуйста, в чем различия между модульным, процедурным и структурным программированием? Читаю в...

Различия между scanf("%s") и gets() - C++
На сколько я знаю, scanf(&quot;%s&quot;) считывает до первого пробела, а gets() до первого переноса строки. Недавно заметил такую вещь: gets(),...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.06.2011, 12:57     Различия между двумя циклами #16
Цитата Сообщение от Olejeg85 Посмотреть сообщение
если там в конце тоже итератор стоит и по идее как только до конца строки дойдет и встретит 0
Нолю равен символ, а не указаетль на него, условием же продолжения является именно ненулевой указатель.

Добавлено через 3 минуты
Цитата Сообщение от diagon Посмотреть сообщение
arr[] это не совсем указатель...
C++
1
int arr[]={2123,231,23,3423}; //массив, реализуемый через указатель, далее име arr везде будет обозначать константый неразыменованный указатель на переменную
Добавлено через 4 минуты
Цитата Сообщение от Olejeg85 Посмотреть сообщение
arr[]; - указатель на первый элемент массива *parr=arr; - указатель на первый элемент массива разницы я так понимаю нет?
Разницы между копированием укзателя из arr в явный указатель и его непосредственным использованием нет за исключением циклов, перебирающих указатель:
C++
1
2
int arr[]=...;
for(; arr</*Не счем сравниваить*/; ++arr /*Не допустимо, так как указаетль то константный*/)
C++
1
2
3
int arr[n]=...;
int *p;
for(p=arr; p<arr+n; ++p)// А здесь всё в порядке
Добавлено через 5 минут
Цитата Сообщение от diagon Посмотреть сообщение
arr = это указатель на "qwerty" Если его разыменовать(*arr), то получим первый элемент
Вообще то и arr указывает на первый символ, различие между указателем на массив (не путать с указателем на указатель на массвив) и на его нулевой элемент лишь в использовании: по указателю на массив и индексу элмента вычисляется указатель на этот элемент, а указатель на нелевой элмент используется непосредственно для его адресации, но указатель на произвольный элемент вычисляется простым сложением указателя на нулевой элемент с произведением размера и индекса элемента, а использование одного и того же указателя в обеих опостасях не требует даже приведения типа.

Добавлено через 7 минут
Цитата Сообщение от grizlik78 Посмотреть сообщение
&arr[0] == (char*)&arr
&arr имеет тип char ** и имеет значение указателя на arr, (char *)приводит к char*, arrх[0] имеет тип char. Хотя, тест показывает, что равенство истинно, но абсолютно не понятно, с какого перпугу так должно быть.

Добавлено через 6 минут
А вот с точки зрения sizeof статичесткий массив и указатель на его элемент - не одно и то же. Для массива sizeof вёрнёт размер в байтах массива, а для указателя - самого указателя.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
20.06.2011, 13:12     Различия между двумя циклами #17
Цитата Сообщение от taras atavin Посмотреть сообщение
но абсолютно не понятно, с какого перепугу так должно быть.
Ну вот есть такая особенность.

Цитата Сообщение от taras atavin Посмотреть сообщение
А вот с точки зрения sizeof статичесткий массив и указатель на его элемент - не одно и то же. Для массива sizeof вёрнёт размер в байтах массива, а для указателя - самого указателя.
Да, разумеется. Я должен был об этом вспомнить!

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
&arr имеет тип char **
Не совсем так. &arr имеет тип указателя на массив, который без вопросов автоматически может приводиться к двойному указателю char**
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.06.2011, 13:12     Различия между двумя циклами #18
Вообще статический массив нифига не указатель, а некая сущность, с которой ассоциированы размер всего массива и указатель на его нулевой элемент.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.06.2011, 01:25     Различия между двумя циклами #19
Цитата Сообщение от tylix Посмотреть сообщение
Это вопрос??

Не по теме:

У меня встречный: Зачем писАть свою функцию strlen(), если такая уже есть?
зачем мне вставлять два цикла вместо
if (strlen(a) > strlen(b)) ?



ПС accept сорри, я так понял ты это и хотел кому-то показать )
часто бывают задания учебные, где функции стандартной библиотеки пишутся своими руками
исходный код в первом сообщении как раз демонстрирует, что там подсчитывается длина строки
xAtom в сообщении написал избыточный код, а я продемонстрировал, как его можно сократить в контексте исходного задания, и как его можно сократить вообще

не смотри, что там указатель выходит за край, даже за нуль-символ, это можно, устанавливать указатель за последний элемент массива
и даже в таком случае от него можно отнять (cnt + 1), возвратившись к исходной строке, не теряя её
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.06.2011, 09:25     Различия между двумя циклами #20
Цитата Сообщение от tylix Посмотреть сообщение
Не по теме: У меня встречный: Зачем писАть свою функцию strlen(), если такая уже есть?
А откуда тебе известно, что текущая её версия оптимальна? Иначе же актуальна разработка её новой версии. Новичок врядли сможет сделать лучше, чем стандартные функции уже написаны, но если их доработка актуальна, то кто же будет профессионально этим заниматься. Может это когданибудь будешь ты? Или вдруг тебе потом понадобится не стандратный динамический контейнер, измеряющий, но не хранящий свой размер? Какую нибудь новую корягу изобретёшь с функцией-членом числа узлов? Или строку не стандартную? Или будешь делать числовой тип переменной разрядности и тебе там понадобится функция-член, измеряющая разрядность?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 02:19     Различия между двумя циклами
Еще ссылки по теме:

Взаимодействие между двумя программами - C++
Здравствуйте! Буду рад если кто сможет подсказать) Есть 2 программы. Одна написана на с#, другая на с++ mfc. Нужна наладить между ними...

Сумма между двумя контейнерами - C++
I need to create function Sum() that calculates sum between two containers. Code below work fine except function Sum between two...

Передача данных между двумя приложениями. - C++
Суть проблемы такова: есть приложение на с#, производящее вычисления, результатом является массив данных. Есть прога на с++ + QT, умеющая...

Обмен данными между двумя процессами - C++
Добрый день/вечер. Усердно слушал преподавателя на паре, прошуршал много литературы дома, но так и не понял, как заюзать обмен данными...

Расстояние между двумя ближайшими городами - C++
Помогите пжалста. В некотором государстве n городов. Найти расстояние между двумя ближайшими городами от города A. Входные данные В...


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

Или воспользуйтесь поиском по форуму:
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
22.06.2011, 02:19     Различия между двумя циклами #21
taras atavin, полностью с тобой согласен

Добавлено через 6 минут
Цитата Сообщение от accept Посмотреть сообщение
часто бывают задания учебные, где функции стандартной библиотеки пишутся своими руками
спасибо, теперь все понятно.

ПС: C/C++ для меня хобби. На прогмера не учился, поэтому не знаю что там к чему и в какой последовательности дают
Yandex
Объявления
22.06.2011, 02:19     Различия между двумя циклами
Ответ Создать тему
Опции темы

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