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

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
#1

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

14.09.2012, 21:25. Просмотров 1713. Ответов 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 (СИ)):

Несовместимый тип указателя в присваивании - C (СИ)
Только начал изучать Си и указатели. При написании простой программы получаю предупреждение: main.c: В функции «main»: main.c:12:5:...

Ошибка выражение должно иметь тип указателя на объект - C (СИ)
#include <stdio.h> #include <conio.h> int main(void) { int x,a,n; printf("\nVvedite nat. chislo"); scanf("%i",&n); ...

"Выражение должно иметь тип указателя на объект" - C (СИ)
Добрый вечер! При написании кода возникло ряд проблем , как только не пытался исправить , но всё равно не получается.Надеюсь на вашу...

тип или ТИП? Вот в чем вопрос... - C (СИ)
Доброго времени суток, форумчане... Задался я вот тут одним вопросом, по сути своему - пустяковым, но очень интригуещем меня.. Не...

ArtMoney. Тип переменной - "С точкой 4 байта". Что за тип? - C (СИ)
Привет! В чужой программе имеется 4х байтовая переменная (значение (hex) - 00 00 10 42). ArtMoney выводит её правильно (тип - "С...

Сравнение указателя и integer - C (СИ)
Здравствуйте. Есть такая вот программа: int main(int argc, char *argv, char *envp){ for(int i=0; i<argc; i++){ if(argv ==...

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

Добавлено через 11 часов 58 минут
А если серьезно, как исправить этот код на нормальный?
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 11:43 #4
Цитата Сообщение от vortexx1 Посмотреть сообщение
А если серьезно, как исправить этот код на нормальный?
Убрать модификатор const
C++
1
void inputAnalys( int* num, char** param )
0
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:02  [ТС] #5
Выглядит как подгонка под ответ.
А если мне действительно нужен константный указатель?
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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 / 2
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:28  [ТС] #7
Проверка корректности ввода.
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
15.09.2012, 14:35 #8
Так указатель то зачем? Ты без проблем можешь передать его как const int num
0
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
15.09.2012, 14:42  [ТС] #9
Чтоб передавать не по значению, а по ссылке. Эффективнее так.
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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
Привет! Вот еще темы с ответами:

Передача в функцию указателя - C (СИ)
Всем доброго времени суток. Есть указатель на char char *v_Ptr; //указатель Нужно передать его в функцию : void testing(char...

Копирование из указателя по значению - C (СИ)
Есть довольно простая на первый взгляд задача. Нужно преобразовать тип указателя и скопировать данные по значению. Сейчас реализовано это...

Изменение указателя в функции - C (СИ)
Сразу напишу код, а дальше вопрос #include <stdlib.h> #include <stdio.h> void f(int *pp) { pp = NULL; }

Область видимости указателя - C (СИ)
Допустим есть две области видимости: #include <stdio.h> int main (void) { int* p; { ...


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

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

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