powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / What is the construction ‘(char *)’ called and what does it do?
12 сообщений из 12, страница 1 из 1
What is the construction ‘(char *)’ called and what does it do?
    #32116959
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите ответить на тестовый вопрос (я на С с 89 года ничего не писал и книжек нет под рукой):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LINE	Contains	                          Question
 50 	char * p;	
 200 	p=test();	
 201 - 300 	 /* we want to use ‘p’ here*/ 	
 2000 	char * test()                      What might go between the parentheses 
                                                    in this particular situation?  
 2001 	{	
 2002 	   char buf[ 8 ];	
 2003 - 2050   /* unspecified, buf defined here */ 	
 2051 	  return (char *) buf;             What is the construction ‘(char *)’ called
                                                    and what does it do?  What do the 
                                                    constructions of that name do in general?
 2052 	}


1. Is this a reasonable function?

Мне кажется, что вполне резонно использовать такие функции, почему бы нет...

2. Will it work at all?

Кажись работать не будет, т.к.при выходе из функции buf[8] очистится...

3. Is it good practice, and why?

Если я правильно понял, то использование указателей является хорошей практикой...

4. How, exactly, could one get a second ‘char *’ to use back from this function? Be specific in terms of the exact syntax needed. Another way to state this question is how can this function be modified to return a ‘char *’ from the function, and an additional ‘char *’ value in one function call. Please make sure that your answer will work even if the size of the char * desired is not known in the outside calling function. Avoid C++ syntax. Include statements in called and calling functions. Use good programming practice. Although alternatives are acceptable, for this question, please include an answer which maintains the original return type.

Интересно, если вот так: (char *) test() - это будет работать....
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32116975
Ingvarwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы ответил вот так:

— Строка 2000
Код: plaintext
char * test()
между скобками может быть void.
— СТрока 2051
Код: plaintext
return (char *) buf;
используется приведение к типу (type cast) в данном случае тип char [] приводится к типу char *.

И ответы на вопросы:
1. Подобные функции вполне можно использовать. Только если используется функция для выделения памяти (как test()), то должна также использоваться функция для очистки памяти.

2. Точно, работать не будет, так как память, выделенная под buf очистится при выходе из функции.

3. Если речь идет об использовании указателей вообще, то конечно это хорошая практика. Но в данном конкретном случае использование подобной функции — плохая практика.

4. На мой взгляд речь идет о том как получить два указателя на char одним вызовом функции. Поскольку вернуть два значения из функции нельзя, то можно добавить параметр:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
char *test(char *ptr)
{
  char *ptrRet;      /* Это то, что должно возвращаться */ 

   /* Здесь выделить память под оба указателя при помощи malloc */ 
   /* Как это сделать я уже и сам не помню...  */ 

  return ptrRet;
}


Вроде бы так...
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117133
>4. На мой взгляд речь идет о том как получить два указателя на char одним вызовом функции. Поскольку вернуть два значения из функции нельзя, то можно добавить параметр:
char *test(char *ptr)
{
char *ptrRet; /* Это то, что должно возвращаться */

/* Здесь выделить память под оба указателя при помощи malloc */
/* Как это сделать я уже и сам не помню... */

return ptrRet;
}
Вроде бы так...



Что-то я не вижу каким образом у вас возвращается из функции второй char*.
Вы передаете в функцию char*, но не возвращаете. Вернуть из функции вы можете измененный массив на который указывает ptr.
Помоему надо так.

char *test(char **ptr)
{
char *ptrRet; /* Это то, что должно возвращаться */

/* Здесь выделить память под оба указателя при помощи malloc */
/* Как это сделать я уже и сам не помню... */
*ptr=(char*)malloc(1000);
ptrRet=(char*)malloc(1000);

return ptrRet;
}

Ну и вызов
void main()
{
char *p1,*p2;
p1=test(&p2);
}
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117204
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю еще , что функция используеться перед объявлением.
Поэтому надо бы еще прототип добавить !
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117209
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще , в С++ взамен malloc используеться new , который выделяет память по типу.

взамен

char *ptrRet; /* Это то, что должно возвращаться */
/* Здесь выделить память под оба указателя при помощи malloc */
/* Как это сделать я уже и сам не помню... */
*ptr=(char*)malloc(1000);
ptrRet=(char*)malloc(1000);

можно писать


char *ptrRet = new char[1000];
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117211
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще - Нельзя забыть об освобождении зарезервированной памяти
командами
malloc - free
new - delete
соответсвенно.
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117237
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это почему вдруг функция не может возвращать несколько значений, а так:

typedef struct
{
int val1;
int val2;
} my_struct;


my_struct f(void)
{
return( my_struct(1,2) );
}
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117253
Ingvarwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция не может вернуть больше одного значения — в том смысле, что нельзя написать
Код: plaintext
 return  5 ,  10 ,  15 ; 
чтобы вернуть из функции три целых числа — как тогда написать присвоение результата этой функции трем переменным?
А в коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 typedef struct 
{ 
    int val1; 
    int val2; 
} my_struct; 


my_struct f(void) 
{ 
    return( my_struct( 1 , 2 ) ); 
}
будет возвращено одно значение — объект-структура. Хотя конечно этот объект будет содержать два значения int.
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117344
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Было бы правильнее , зарезервировать память до вызова функции и заполнить заданную область.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void f(char*);

char buf[ 8 ];
f(buf);
// 
void f(char*a_pBuf)
{
  strcpy(a_pBuf, "Test" );
}


2funikovyuri
функция всегда возвращает одно и только одно значение !
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117554
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Ingvarwolf: какие мы умные - рассказали мне про функции :-)

P.S. я имел ввиду что данная задаяа решается и все
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117608
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2funikovyuri

То что пишеться, не обязательно для тебя.
Повторное чтение укрепляет знания.
:-) не держи зло на меня :-)
...
Рейтинг: 0 / 0
What is the construction ‘(char *)’ called and what does it do?
    #32117945
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2YuriAM: заметано :-)

P.S> нервы
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / What is the construction ‘(char *)’ called and what does it do?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]