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

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

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

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

19.06.2011, 15:31. Просмотров 1484. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 15:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Различия между двумя циклами (C++):

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

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

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

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

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

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

20
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
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 вёрнёт размер в байтах массива, а для указателя - самого указателя.
0
grizlik78
Эксперт С++
1982 / 1475 / 126
Регистрация: 29.05.2011
Сообщений: 3,048
20.06.2011, 13:12 #17
Цитата Сообщение от taras atavin Посмотреть сообщение
но абсолютно не понятно, с какого перепугу так должно быть.
Ну вот есть такая особенность.

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

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
&arr имеет тип char **
Не совсем так. &arr имеет тип указателя на массив, который без вопросов автоматически может приводиться к двойному указателю char**
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
20.06.2011, 13:12 #18
Вообще статический массив нифига не указатель, а некая сущность, с которой ассоциированы размер всего массива и указатель на его нулевой элемент.
0
accept
4832 / 3253 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
21.06.2011, 01:25 #19
Цитата Сообщение от tylix Посмотреть сообщение
Это вопрос??

Не по теме:

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



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

не смотри, что там указатель выходит за край, даже за нуль-символ, это можно, устанавливать указатель за последний элемент массива
и даже в таком случае от него можно отнять (cnt + 1), возвратившись к исходной строке, не теряя её
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
21.06.2011, 09:25 #20
Цитата Сообщение от tylix Посмотреть сообщение
Не по теме: У меня встречный: Зачем писАть свою функцию strlen(), если такая уже есть?
А откуда тебе известно, что текущая её версия оптимальна? Иначе же актуальна разработка её новой версии. Новичок врядли сможет сделать лучше, чем стандартные функции уже написаны, но если их доработка актуальна, то кто же будет профессионально этим заниматься. Может это когданибудь будешь ты? Или вдруг тебе потом понадобится не стандратный динамический контейнер, измеряющий, но не хранящий свой размер? Какую нибудь новую корягу изобретёшь с функцией-членом числа узлов? Или строку не стандартную? Или будешь делать числовой тип переменной разрядности и тебе там понадобится функция-член, измеряющая разрядность?
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
22.06.2011, 02:19 #21
taras atavin, полностью с тобой согласен

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

ПС: C/C++ для меня хобби. На прогмера не учился, поэтому не знаю что там к чему и в какой последовательности дают
0
22.06.2011, 02:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 02:19
Привет! Вот еще темы с ответами:

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

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих - C++
1. Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

Различия между Java и Си++ - C++
Я раньше программировал на си++,сейчас начал на java,нужно понять основные различия 1. Каковы отличия в структуре программы вычисления...

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


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

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

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