реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Интеграл, непонятен один момент
demiurg_spb
сообщение Dec 14 2012, 13:39
Сообщение #16


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Xenia @ Dec 14 2012, 17:13) *
Или я не права?
не совсем. попробуйте двумерный массив.
Ну или посмотрите что вам вернёт sizeof(array1) и что sizeof(array2) для таких вот случаев
Код
uint8_t array1[10];
uint8_t array2[2][5];


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 14 2012, 13:45
Сообщение #17


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(demiurg_spb @ Dec 14 2012, 17:39) *
не совсем. попробуйте двумерный массив.
Ну или посмотрите что вам вернёт sizeof(array1) и что sizeof(array2) для таких вот случаев
Код
uint8_t array1[10];
uint8_t array2[2][5];


Ну так я же не просила вас вызывать двухмерную функцию. sm.gif
Речь шла о том, что оператор [] приложим к указателю, так же как и оператор (). Оба они требуют, чтобы слева от них стоял указатель, хоть бы и вычисляемый. Т.е. я не за идентичность указателей ратовала, а за единообразие выполнения операторов "скобочки". А именно, в выражении f() скобочки должны интерпретировать f, как указатель (в данном случае на функцию), а не как-то иначе. Зачем же тогда f предварительно разыновывать? Ведь если имя массива (без скобочек) это указатель, то и имя фукции без скобочек тоже должно быть указателем. А чем же ещё-то?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Dec 14 2012, 17:09
Сообщение #18


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Xenia @ Dec 14 2012, 15:45) *
А именно, в выражении f() скобочки должны интерпретировать f, как указатель (в данном случае на функцию), а не как-то иначе.
И это так и есть по стандарту.
Цитата
6.3.2 Other operands
6.3.2.1 Lvalues, arrays, and function designators

...
3 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue.

4 A function designator is an expression that has function type. Except when it is the operand of the sizeof operator or the unary & operator, a function designator with type ‘‘function returning type’’ is converted to an expression that has type ‘‘pointer to function returning type’’.

Цитата(Xenia @ Dec 14 2012, 15:45) *
Зачем же тогда f предварительно разыновывать?
Абсолютно незачем. Так как после этого разименованное ‘‘function returning type’’ моментально опять превращается в ‘‘pointer to function returning type’’ для того, чтобы скобочки () (которые в данном случае являются «function-call operator») могли этим воспользоваться.
Цитата
6.5.2.2 Function calls
Constraints
1
The expression that denotes the called function shall have type pointer to function returning void or returning an object type other than an array type.

Как следствие, разыменовывать можно сколько угодно раз, это ничего не меняет.
Код
#include <stdio.h>

int (*pf)(const char *) = puts;

int main()
{
        pf("pf");
        // Разыменовываем, автоматически приводится к указателю, мы его опять разыменовываем и т.д.
        (****pf)("****pf");
        return 0;
}

С выборкой указателя на функцию из массива аналогично pfunc_array[index](arguments); и всё.
Но при большом желании можно и (*****pfunc_array[index])(arguments);. Эффект тот же.

И где-то на этом форуме об этом уже говорили. И вроде как не раз.

_____________________
Сегодня смотрел «День сурка». Опять…


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st September 2025 - 20:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.02331 секунд с 7
ELECTRONIX ©2004-2016