Jaký je rozdíl v programování v jazyce C mezi funkčním jménem a proměnnou?


Odpověď 1:

Název funkce je jméno, které přiřadíte funkci, kterou vytvoříte a která může obsáhnout 1 až mnoho řádků kódu. Funkce může přijmout 0 až mnoho mnoha parametrů; ale vrací pouze jednu.

Proměnná je v podstatě pojmenovaný paměťový prostor přiřazený k přijímání a ukládání informací, který lze také předat jako parametr funkci. Za normálních okolností označujete proměnné jako určitý typ: celé číslo, řetězec, znak atd.


Odpověď 2:
Jaký je rozdíl v programování v jazyce C mezi funkčním jménem a proměnnou?

Jsou to dvě úplně odlišné věci.

Název funkce (není třeba podtržítko, je to jen fráze) je název funkce, určený při deklarování nebo definování funkce.

Proměnná je - není úplně jasné, co je „proměnná“ v C. Standard C nepoužívá slovo „proměnná“ v obvyklém smyslu. C definuje pojem objekt jako „oblast ukládání dat v prováděcím prostředí, jehož obsah může představovat hodnoty“. Pojmenovaný deklarovaný objekt lze rozumně nazvat „proměnnou“, ale neexistuje shoda ohledně toho, co přesně je nebo není „proměnnou“.

Lze volat funkci. Objekt může uchovávat hodnoty.


Odpověď 3:

Hlavní rozdíl spočívá v tom, že funkce spojená s názvem funkce je kompilátorem automaticky nastavena. V C nejsou funkce „prvotřídními objekty“ - nemůžete je předat funkcím, které je upraví / kombinují a vrátí je, jak je to možné, s čísly nebo řetězci znaků).

proměnné drží hodnoty prvotřídních objektů (celá čísla, znaky, float čísla atd.) Můžete mít ukazatel na funkci a to je prvotřídní objekt, který můžete ukládat a předávat / vracet z funkcí (a použít k vyvolání funkce), ale nemůžete změnit „hodnotu“ samotné funkce za běhu, jako to můžete u prvotřídních objektů.

Vypadají takřka stejně jako proměnné, ale jediné, co s nimi můžete udělat, je, než aby si vzali jejich adresu, je zavolat. Nemůžete říci main = {něco ...}, stačí definovat hlavní funkci a nechat kompilátor, aby udělal asociaci jména a kódu za scénami.

Jazyky jako Haskell, kde můžete definovat hodnotu funkcí za běhu, se z tohoto důvodu nazývají „funkční“ jazyky. Jednoduchým příkladem by byla funkce nazvaná make adder adder, která předáte daňovou sazbu a vrací funkci, která přidá k položkám, které jí byly předány, pevnou daňovou sazbu:

addstatetax = maketaxadder (0,05)

addlocaltax = maketaxadder (.015)

zde jsme vytvořili 2 funkce za běhu, které lze nazvat např. addstatetax (100) vrátí 105, zatímco addlocaltax (100) vrátí 101,50.

proměnná addstatetax má „hodnotu“ funkce, která vezme číslo a vrátí další s přidaným 5%. Podobné věci můžete dělat v C pomocí ukazatelů struktur a funkcí, ale je to mnohem těžší (definování typů ukazatelů funkcí v C je notoricky obtížné) a náchylnější k chybám.


Odpověď 4:

Název funkce je v podstatě ukazatel, takže můžete dělat něco jako: void (* func) (int); func = myVoidFunc; // nebo alternativněfunc = & myVoidFunc;

a to je opravdu hlavní rozdíl. Při běžné práci s ukazatelem je velmi důležité, pokud používáte operátora adresy (ampersand) nebo ne, například:

int * ptr = myVar; // andint * ptr = & myVar;

téměř jistě povede k velmi odlišnému chování, ale kromě toho jsou názvy funkcí opravdu jen ukazateli, alespoň takhle to vidím. Jsem si jistý, že půjdu do podrobností, nedám vůbec žádný smysl, ale z vašeho pohledu, a já, jsem si jistý, že to udělá.

Další rozdíl je samozřejmě v tom, že nemůžete zrušit název funkce, nemůžete na něj udělat aritmetiku ukazatele, nebo alespoň pokud to můžete, je to extrémně nebezpečné, a tak dále a tak dále.