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

char *

19.04.2012, 10:48. Показов 2452. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru