Nyilván van, akiben nincs is. Akiben igen, annak tapasztalatom szerint a 2. előadásbeli alábbi jellegű fólia témájának megértése után: amikor leesik, hogy a mutató valójában nem egy bonyolult konstrukció.
Mikorra oszlik el a nyelvtől való félelem?
2011.02.21. 20:35 nb
10 komment
Címkék: mutató tömb char** malloc címaritmetika
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.
nb · http://fersml.blog.hu 2011.02.22. 07:55:54
Aki először jelzi egy kommentben, ott egy kisb.
akikiss 2011.02.22. 12:14:53
&dinamikus_tomb[1]
*(dinamikus_tomb+1)
alsó sorába az elején két * kell
pi_zoli 2011.02.22. 12:15:19
dinamikus_tomb+1 a helyes &dinamikus_tomb[1] *(dinamikus_tomb+1) helyett mert a dinamikus_tomb erteket megnovelve a dinamikus_tomb[] eslo elemet kapjuk /*gondolom*/
nb · http://fersml.blog.hu 2011.02.22. 16:11:54
dinamikus_tomb[0][1] = 'a';
dinamikus_tomb[1][0] = 'b';
dinamikus_tomb[1][1] = 'c';
dinamikus_tomb[2][0] = 'd';
dinamikus_tomb[2][1] = 'e';
dinamikus_tomb[2][2] = 'f';
printf ("%c\n", **(dinamikus_tomb + 1));
mit ír ki?
nb · http://fersml.blog.hu 2011.02.22. 16:13:00
dinamikus_tomb[1]
*(dinamikus_tomb+1)
akikiss 2011.02.22. 17:00:20
nb · http://fersml.blog.hu 2011.02.22. 17:04:23
akikiss 2011.02.22. 18:39:57
kód
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
char dinamikus_tomb[2][2];
dinamikus_tomb[0][1] = 'a';
dinamikus_tomb[1][0] = 'b';
dinamikus_tomb[1][1] = 'c';
dinamikus_tomb[2][0] = 'd';
dinamikus_tomb[2][1] = 'e';
dinamikus_tomb[2][2] = 'f';
printf ("%c\n", **(dinamikus_tomb + 1));
return (EXIT_SUCCESS);
}
nb · http://fersml.blog.hu 2011.02.22. 18:51:37
Bár (szigoróan a példát követve) Te egy fix. két dimenziós tömbbe próbáltad ki, viszont esetünkben a sorok különböző méretűek voltak, valami ilyen kód jobban fekszik ide:
#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
int sorok_szama = 3;
int oszlopok_szama;
char **dinamikus_tomb;
if ((dinamikus_tomb = (char **)
malloc (sorok_szama * sizeof (char *))) == NULL)
{
perror ("memoria");
exit (EXIT_FAILURE);
}
for (int i = 0; i < sorok_szama; ++i)
{
oszlopok_szama = i + 1;
if ((dinamikus_tomb[i] = (char *)
malloc (oszlopok_szama * sizeof (char))) == NULL)
{
perror ("memoria");
exit (EXIT_FAILURE);
}
}
dinamikus_tomb[1][1] = 'x';
printf ("%c\n", *(*(dinamikus_tomb + 1) + 1));
printf ("%c\n", *(*(&dinamikus_tomb[1]) + 1));
dinamikus_tomb[0][1] = 'a';
dinamikus_tomb[1][0] = 'b';
dinamikus_tomb[1][1] = 'c';
dinamikus_tomb[2][0] = 'd';
dinamikus_tomb[2][1] = 'e';
dinamikus_tomb[2][2] = 'f';
printf ("%c\n", **(dinamikus_tomb + 1));
*(*(dinamikus_tomb + 1) + 1) = 'y';
printf ("%c\n", dinamikus_tomb[1][1]);
printf ("%c\n", *(dinamikus_tomb[1] + 1));
printf ("%c\n", *(*(dinamikus_tomb + 1) + 1));
for (int i = 0; i < sorok_szama; ++i)
free (dinamikus_tomb[i]);
free (dinamikus_tomb);
return 0;
}