Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
#1

Несовместимый тип указателя - C (СИ)

14.09.2012, 21:25. Просмотров 1900. Ответов 10
Метки нет (Все метки)

Здравствуйте. Допустим, есть что-то вроде такого вот:
C
1
2
3
4
5
void inputAnalys( const int* num, const char** param ) {}
 
main( int argc, char **argv ) {
    inputAnalys( &argc, argv );
}
GCC выдаёт предупреждение:
Bash
1
2
несовместимый тип указателя
expected "const char **" but argument is of type "char **"
Вроде всё компилируется и даже работает, но хочется все же разобраться, что же здесь не так.
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2012, 21:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Несовместимый тип указателя (C (СИ)):

Несовместимый тип указателя в присваивании
Только начал изучать Си и указатели. При написании простой программы получаю...

Ошибка выражение должно иметь тип указателя на объект
#include <stdio.h> #include <conio.h> int main(void) { int x,a,n;...

"Выражение должно иметь тип указателя на объект"
Добрый вечер! При написании кода возникло ряд проблем , как только не пытался...

тип или ТИП? Вот в чем вопрос...
Доброго времени суток, форумчане... Задался я вот тут одним вопросом, по сути...

ArtMoney. Тип переменной - "С точкой 4 байта". Что за тип?
Привет! В чужой программе имеется 4х байтовая переменная (значение (hex) -...

Изменение указателя в функции
Сразу напишу код, а дальше вопрос #include <stdlib.h> #include <stdio.h>...

10
defer
秘密
558 / 238 / 16
Регистрация: 29.11.2010
Сообщений: 797
14.09.2012, 22:33 #2
Цитата Сообщение от vortexx1 Посмотреть сообщение
хочется все же разобраться, что же здесь не так.
Вообще-то там написано, что не так
expected "const char **" but argument is of type "char **"
0
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 11:22  [ТС] #3
defer, вы правы, спасибо большое за помощь.

Добавлено через 11 часов 58 минут
А если серьезно, как исправить этот код на нормальный?
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 11:43 #4
Цитата Сообщение от vortexx1 Посмотреть сообщение
А если серьезно, как исправить этот код на нормальный?
Убрать модификатор const
C++
1
void inputAnalys( int* num, char** param )
0
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:02  [ТС] #5
Выглядит как подгонка под ответ.
А если мне действительно нужен константный указатель?
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 14:12 #6
Цитата Сообщение от vortexx1 Посмотреть сообщение
А если мне действительно нужен константный указатель?
в чем вопрос
C++
1
int main( const int narg, const char **arg )
Добавлено через 1 минуту
Кстати, непонятно зачем ты вообще передаешь указатель на argc. Ты же не собираешься её изменять!?
1
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:28  [ТС] #7
Проверка корректности ввода.
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 14:35 #8
Так указатель то зачем? Ты без проблем можешь передать его как const int num
0
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:42  [ТС] #9
Чтоб передавать не по значению, а по ссылке. Эффективнее так.
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 14:56 #10
Цитата Сообщение от vortexx1 Посмотреть сообщение
Чтоб передавать не по значению, а по ссылке. Эффективнее так.
И чем же это так эффективнее?))
0
alkagolik
Заблокирован
15.09.2012, 23:17 #11
Цитата Сообщение от vortexx1 Посмотреть сообщение
А если серьезно, как исправить этот код на нормальный?
все в порядке. если напрягает warning, то приведи явно к типу inputAnalys( &argc, (const char**) argv ).
0
15.09.2012, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 23:17
Привет! Вот еще темы с решениями:

Сравнение указателя и integer
Здравствуйте. Есть такая вот программа: int main(int argc, char *argv, char...

Передача в функцию указателя
Всем доброго времени суток. Есть указатель на char char *v_Ptr;...

Возвращение указателя из функции
Здравствуйте! Есть функция: char* dectobin(unsigned dec) { static char...

Обращение к указателю указателя
Приветствую всех. Возник вот такой вопрос: как в С передавать указатели на...


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

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

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