Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370

char *

19.04.2012, 10:48. Показов 2497. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я правильно понимаю, что

C
1
2
char *chbuff = "qwerty";
chbuff+= 2;
этот код передвинет указатель на букву 'e'?
что тогда произойдет с q и w?

Если неправильно понимаю, объясните, что значат эти 2 строчки
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2012, 10:48
Ответы с готовыми решениями:

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор не посылает куда подальше. Нет он конечно...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что "char *concat(char *,...)": невозможно преобразовать аргумент 1 из "const char "...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

25
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
20.04.2012, 00:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от grizlik78 Посмотреть сообщение
Компилятор знает, что str указатель из объявления переменной в строке 1. Если бы это был указатель на любой другой тип, кроме char, то вывод cout<<str выдал бы именно адрес. Но указатель на char интерпретируется особым образом и выводится именно содержимое строки, то есть цепочка символов, начиная с данного адреса и до первого нуля. cout<<*str должен вывести только первый символ строки, потому что *str имеет тип одиночного символа char.
C++
1
2
int * int = 5;
        cout<<"int : "<<*int<<"\t(adr : "<<&int<<")"<<endl;
А если, это другой тип, например, int, то так надо вывести значение переменной через *int, а если написать просто int - то выведет просто адрес на переменную, то же самое, что &int? Или я не так понял?
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
20.04.2012, 00:33
Переменная не может называться int
C++
1
2
int * p_int = 5;
cout<<"int : "<<*p_int<<"\t(adr : "<<p_int<<")"<<endl;
*p_int выдаст значение, p_int адрес, по которому хранится это значение, а &p_int адрес самой переменной p_int, то есть адрес адреса

Добавлено через 4 минуты
Да, вот ещё не сразу обратил внимание:
C++
1
int * p_int = 5;
5 это значение указателя, то есть это как-бы и есть адрес. И вообще-то в этом месте компилятор выдаст ошибку, поскольку неявное преобразование из int в int* не разрешено.
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
20.04.2012, 00:49
grizlik78,
Спасибо большое, теперь я все понял!

Да, да, конечно, эти ошибки вызваны тем, что я торопился писал... извиняюсь
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
20.04.2012, 00:52
jvov, константный массив int это не строка и простыми заморочками arr += 2 уже не обойтись, вот более менее подобный на функционалы кодов выше вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
int main()
{
    int arr[] = {5,-7,11,25,4};
    int buf[5]= {0};
 
 
    cout<<"input";
    int i, n = sizeof(arr)/sizeof(arr[0]);
    memcpy((void *)buf,(void *)arr,n*sizeof(int));//Скопировали в buf массив arr
    cout<<"\narr : ";
    for(i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cout<<"\nbuf : ";
    for(i = 0; i < n; i++)
        cout<<buf[i]<<" ";
 
    int m = (n - 2);
    memcpy((void *)buf,&arr[2],m*sizeof(int));//Скопировали в buf массив arr начиная со второго элемента
    
    cout<<"\nchange pointer";
    cout<<"\narr : ";
    for(i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cout<<"\nbuf : ";
    for(i = 0; i < m; i++)
        cout<<buf[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
Миниатюры
char *  
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
20.04.2012, 14:40
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
jvov, константный массив int это не строка и простыми заморочками arr += 2 уже не обойтись, вот более менее подобный на функционалы кодов выше вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
int main()
{
    int arr[] = {5,-7,11,25,4};
    int buf[5]= {0};
 
 
    cout<<"input";
    int i, n = sizeof(arr)/sizeof(arr[0]);
    memcpy((void *)buf,(void *)arr,n*sizeof(int));//Скопировали в buf массив arr
    cout<<"\narr : ";
    for(i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cout<<"\nbuf : ";
    for(i = 0; i < n; i++)
        cout<<buf[i]<<" ";
 
    int m = (n - 2);
    memcpy((void *)buf,&arr[2],m*sizeof(int));//Скопировали в buf массив arr начиная со второго элемента
    
    cout<<"\nchange pointer";
    cout<<"\narr : ";
    for(i = 0; i < n; i++)
        cout<<arr[i]<<" ";
    cout<<"\nbuf : ";
    for(i = 0; i < m; i++)
        cout<<buf[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}

C++
1
int i, n = sizeof(arr)/sizeof(arr[0]);
- вот эту строчку не очень понимаю, это делим длину массива на длину(первый элемент)?

C++
1
int m = (n - 2);
C++
1
m*sizeof(int)
Если не сложно, не могли бы вы пояснить эти строчки?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
20.04.2012, 14:50
sizeof( arr ) возвращает на этапе компиляции размер массива в байтах, sizeof( arr[ 0 ]) же возвращает размер одного элемента в байтах, вместо нулевого элемента можете взять любой другой, нам просто нужно узнать размер элемента.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2012, 14:50

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Однонаправленные списки. [Error] incompatible types in assignment of 'char*' to 'char [128]'
Доброго времени суток. Начал учить однонаправленные списки, но столкнулся с проблемой: incompatible types in assignment of 'char*' to...

Проблема с несовместимостью типов параметров char, const char, STRSAFE_LPWSTR, STRSAFE_LPCWSTR
Проблемные вопросы отражены на скрине Программа написана к заданию: 1. Разработать прикладной протокол для передачи файлов с помощью...

Как присвоить к новой char переменной другую char переменную с указателем
Как присвоить к новой char переменной другую char переменную с указателем #include&lt;iostream&gt; int main() { using namespace...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru