|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Помогите ответить на тестовый вопрос (я на С с 89 года ничего не писал и книжек нет под рукой): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
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() - это будет работать.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2003, 15:24 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Я бы ответил вот так: — Строка 2000 Код: plaintext
— СТрока 2051 Код: plaintext
И ответы на вопросы: 1. Подобные функции вполне можно использовать. Только если используется функция для выделения памяти (как test()), то должна также использоваться функция для очистки памяти. 2. Точно, работать не будет, так как память, выделенная под buf очистится при выходе из функции. 3. Если речь идет об использовании указателей вообще, то конечно это хорошая практика. Но в данном конкретном случае использование подобной функции — плохая практика. 4. На мой взгляд речь идет о том как получить два указателя на char одним вызовом функции. Поскольку вернуть два значения из функции нельзя, то можно добавить параметр: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Вроде бы так... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2003, 16:23 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
>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); } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 09:53 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Добавлю еще , что функция используеться перед объявлением. Поэтому надо бы еще прототип добавить ! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 11:27 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Еще , в С++ взамен malloc используеться new , который выделяет память по типу. взамен char *ptrRet; /* Это то, что должно возвращаться */ /* Здесь выделить память под оба указателя при помощи malloc */ /* Как это сделать я уже и сам не помню... */ *ptr=(char*)malloc(1000); ptrRet=(char*)malloc(1000); можно писать char *ptrRet = new char[1000]; ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 11:34 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Еще - Нельзя забыть об освобождении зарезервированной памяти командами malloc - free new - delete соответсвенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 11:37 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Это почему вдруг функция не может возвращать несколько значений, а так: typedef struct { int val1; int val2; } my_struct; my_struct f(void) { return( my_struct(1,2) ); } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 12:10 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Функция не может вернуть больше одного значения — в том смысле, что нельзя написать Код: plaintext
А в коде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 12:35 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
Было бы правильнее , зарезервировать память до вызова функции и заполнить заданную область. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
2funikovyuri функция всегда возвращает одно и только одно значение ! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 13:39 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
2Ingvarwolf: какие мы умные - рассказали мне про функции :-) P.S. я имел ввиду что данная задаяа решается и все ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 16:15 |
|
What is the construction ‘(char *)’ called and what does it do?
|
|||
---|---|---|---|
#18+
2funikovyuri То что пишеться, не обязательно для тебя. Повторное чтение укрепляет знания. :-) не держи зло на меня :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2003, 16:51 |
|
|
start [/forum/search_topic.php?author=moonspell_OPD&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 9853ms |
total: | 10003ms |
0 / 0 |