C probléma.1 dimenziós tömb másolása függvénnyel?
Néhányadik próbálkozásra így néz ki, de nem működik, még csak most kezdtem tanulni a C nyelvet, meg úgy általában a programozást így nem meglepő, hogy elakadtam, előre is köszi a válaszokat.
#include <stdio.h>
#include <stdlib.h>
int masolas(int a[100]);
int main(void)
{
int t[100];
int t2[100];
for(int i=0;i<100;i++)
{
t[i]=i*i;
printf("%d\n", t[i]);
}
t2[]=masolas(t[]);
return 0;
}
int masolas(int a[100])
{
for(int i=0;i<100;i++)
{
a[i]=t[i];
}}
Bár a feladat könnyűnek hangzik, a C miatt nem a leg-kezdőbb példa.
A tömböket a kezdőpointerük (elejének a helye a memóriában) alapján tudsz függvénynek átadni. A tömb méretét nem is kell ismerni.
void masolas(int[] mibe, int[] mibol, int hossz) {
__int i;
__for(i=0;i<hossz;++i) {
__ _mibe[i] = mibol[i];
__}
}
Használata: masolas(t2, t1, 100);
Az a jó a másolásban, hogy annyira gyakori a feladat, hogy már megírták mások is, sőt, bekerült a szabványos könyvtárba is.
memcpy néven találod.
t2[]=masolas(t[]); helyett:
#include <string.h>
...
memcpy(t2, t1, sizeof(t2));
csak akkor használd, ha a forrás és a cél típusa azonos.
"Bár a feladat könnyűnek hangzik, a C miatt nem a leg-kezdőbb példa."
:D
Mondj egy kezdőbb példát, ami nem merül ki a nyelv szintaktikájának a kipróbálásában.
Miről beszélsz, hol látsz te itt pointert?:D
(tudom, tudom, de csillagozni akkor se kell)
Egyébként látszik megkörnyékezett a java téged is, lásd a fenti paraméterlistát, amit írtál ;)
Hát hogy ő "gondban volt" velük, az relatív.
Nekem például szintén "gondom volt" velük kb. egy hétig, mert nem értettem, mire valók, és miért kell egy feladatban használni, ha egyszer máshogy is megy.
Aztán mostmár szégyellném magam, ha nem tudnám, mi az (pedig nagyrészt javázok, meg phpzok, de akkor is)
Köszi az eddigi válaszokat, utolsóhoz szólva, valaki kitudná fejteni mire jó a pointer? :D
Mert én sem igazán értem, egyenlőre az a gondolatom volt, hogy nem kell egy új változót létrehozni hanem a már meglévőt használom így kevesebb helyet foglal, de nem vagyok biztos benne.
A pointer egy olyan változó, amely egy memóriacímet tartalmaz. (Vagyis egy memóriaterületre mutat).
Minden változó egyébként egy adott memóriaterületre mutat, ezért lehet először megtévesztő a dolog. Viszont, C-ben a változók lényegében a stack-en lévő egy adott területet jelképeznek, vagyis a stack-en végzett műveleteket teszik szemléletesebbé.
A pointerek is változók, de például egy int típusú változóval szemben az int pointer típusú változó nem egy int értéket tartalmaz, hanem egy int értéket tartalmazó memóriaterület azonosítóját. Ez akár a heap-en is lehet. Azt is megteheted, hogy megváltoztatod, hogy egy adott pointer változó hova mutasson. Tehát az érték, amit a pointer tárol, az hivatkozás egy másik memóriaterületre. (Ami amúgy szintén lehet pointer)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!