Ի՞նչ տարբերություն կա ֆունկցիայի անվան և փոփոխական C- ի ծրագրավորման մեջ:


պատասխանել 1:

Ֆունկցիայի անունն այն անունն է, որը դուք վերագրում եք ձեր ստեղծած գործառույթին, որը կարող է զբաղեցնել 1-ից շատ տող ծածկագրեր: Գործառույթը կարող է ստանալ 0-ից շատ, շատ պարամետրեր: բայց միայն վերադարձնում է մեկը:

Փոփոխականը, ըստ էության, կոչվում է որպես հիշողության տարածք, որը նշանակված է տեղեկատվություն ստանալու և պահելու համար, և որը կարող է փոխանցվել նաև որպես գործառույթ որպես պարամետր: Սովորաբար, փոփոխականները դրվում են որոշակի տիպի ՝ ամբողջական, լարային, նիշ և այլն:


պատասխանել 2:
Ի՞նչ տարբերություն կա ֆունկցիայի անվան և փոփոխական C- ի ծրագրավորման մեջ:

Սրանք երկու բոլորովին այլ բան են:

Ֆունկցիայի անվանումը (ընդգծվածը պարտադիր չէ, այն պարզապես բառակապակցություն է) գործառույթի անվանումն է, որը նշվում է, երբ գործառույթը հայտարարվում կամ սահմանվում է:

Փոփոխական է. Դե, 100% -ով պարզ չէ, թե C- ում ինչ «փոփոխական» է: C ստանդարտը սովորական իմաստով չի օգտագործում «փոփոխական» բառը: C- ն սահմանում է օբյեկտի տերմինը որպես «կատարողական միջավայրում տվյալների պահպանման տարածք, որի պարունակությունը կարող է ներկայացնել արժեքներ»: Անվանված հայտարարված օբյեկտը կարող է ողջամտորեն կոչվել «փոփոխական», բայց համաձայնություն չկա այն մասին, թե կոնկրետ ինչ է «փոփոխական», թե ոչ:

Գործառույթ կարելի է անվանել: Առարկան կարող է պարունակել արժեքներ:


պատասխանել 3:

Հիմնական տարբերությունն այն է, որ գործառույթի անվան հետ կապված գործառույթը ինքնաբերաբար տեղադրվում է կազմողի կողմից: C- ում գործառույթները «առաջին կարգի օբյեկտներ» չեն. Դուք չեք կարող դրանք փոխանցել այն գործառույթներին, որոնք դրանք փոխում են / համատեղում և դրանք վերադարձնում թվերի կամ տողերի նման:

Փոփոխականները պարունակում են հիմնական օբյեկտների արժեքներ (ամբողջ թվեր, նիշեր, լողացող կետի համարներ և այլն): Կարող եք ցուցիչ ունենալ գործառույթի վրա, և դա հիմնական օբյեկտ է, որը դուք կարող եք պահել և փոխանցել / վերադարձնել գործառույթներից (և գործառույթներ կանչել), բայց գործառույթի ժամանակ «Դուք չեք կարող փոխել գործառույթի« արժեքը », ինչպես Դուք դա անում եք առաջին կարգի օբյեկտներով:

Այսպիսով, նրանք բավականին նման են փոփոխականներին, բայց միակ բանը, որ դուք կարող եք անել նրանց հետ, բացի իրենց հասցեն վերցնելուց, նրանց զանգահարելն է: Դուք չեք կարող ասել հիմնականը = {ինչ-որ բան…}, դուք պարզապես պետք է սահմանեք հիմնական գործառույթ և թույլ տվեք, որ կազմողն անի անվան և կոդի համար տեսադաշտում կատարված նկարագրությունը:

Haskell- ի նման լեզուները, որոնցում գործառույթների արժեքը կարող եք սահմանել գործարկման ժամանակ, այդ պատճառով կոչվում են «ֆունկցիոնալ» լեզուներ: Պարզ օրինակ կլինի ստեղծել այնպիսի գործառույթ, որը կոչվում է հարկ վճարող, որի վրա դուք անցնում եք հարկի դրույքաչափ, և որը վերադարձնում է գործառույթ, որն անցած տարրերին ավելացնում է ֆիքսված հարկի դրույքաչափ.

addstatetax = maketaxadder (.05)

addlocaltax = maketaxadder (.015)

Այստեղ մենք գործառույթի ժամանակ երկու գործառույթ ենք ստեղծել: addstatetax (100) -ը վերադառնում է 105-ին, իսկ addlocaltax- ը (100) վերադառնում է 101.50:

Փոփոխական addstatetax- ը ունի մի գործառույթի «արժեք», որը վերցնում է մի թիվ և 5% -ով ավելացնում է ևս մեկ ավելացված: Դուք կարող եք կատարել նմանատիպ առաջադրանքներ C- ում `կառուցվածքով և ֆունկցիայի ցուցիչներով, բայց դա շատ ավելի դժվար է (C- ում ֆունկցիայի ցուցիչի տեսակները տհաճորեն դժվար է) և հակված են սխալների:


պատասխանել 4:

Գործառույթի անվանումը, ըստ էության, ցուցիչ է: Այսպիսով, դուք կարող եք անել հետևյալը. Անվավեր (* գործառույթ) (int); գործառույթ = myVoidFunc; // կամ այլընտրանքային գործառույթ = & myVoidFunc;

և դա իրոք գլխավոր տարբերությունն է: Եթե ​​սովորաբար աշխատում եք ցուցիչների հետ, մեծ փոփոխություն է առաջացնում `օգտագործեք օպերատորի հասցեն, թե ոչ, օրինակ ՝

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

գրեթե անպայման կհանգեցնի բոլորովին այլ պահվածքի, բայց հակառակ դեպքում ֆունկցիայի անունները պարզապես ցուցիչ են, համենայն դեպս այդպես եմ տեսնում: Ես անպայման մանրամասների կմեկնեմ: Ես ընդհանրապես իմաստ չունեմ, բայց ձեր և իմ տեսանկյունից ես վստահ եմ, որ այդպես կլինի:

Իհարկե, մեկ այլ տարբերությունն այն է, որ դուք չեք կարող սահմանել ֆունկցիայի անվանումը, որը դուք չեք կարող անել ցուցիչ թվաբանություն, կամ գոնե եթե դա չափազանց վտանգավոր է և այլն: