Programarea Calculatoarelor, seria CC
malloc:
type* ptr = malloc(size_t size);
Unde
Funcţia alocă o zonă continuă de memorie având dimensiunea de
int *a = malloc( 100 * sizeof(int) );
calloc:
type* ptr = calloc(size_t num, size_t size);
Funcţia alocă spaţiu de memorie pentru un vector cu
int *a = calloc( 100, sizeof(int) );
realloc:
type* ptr = realloc(void* old_ptr, size_t size);
Unde
Funcţia realizează modificarea dimensiunii zonei de memorie referite de
int *a = malloc( 100 * sizeof(int) );
a = realloc( a, 200 * sizeof(int) );
free:
void free(void* ptr);
Unde
strdup:
char *strdup( char *s );
Unde
Funcţia alocă o nouă zonă de memroie la care se copiază octeţii şirului
Copiaţi şi rulaţi următorul program şi scrieţi câte un comentariu în care să explicaţi ce face fiecare instrucţiune. Este foarte important să înţelegeţi cum să folosiţi pointerii în C. Dacă nu înţelegeţi ceva din program, întrebaţi asistenţii.
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
int main ()
{
char c = 'a', *p, s[100];
p = &c;
printf ("%c %c %c", *p, *p+1, *p+2);
s[0] = 'A'; s[1] = 'B'; s[2] = 'C'; s[3] = '\0';
p = s;
printf ("\n%s %s %c %s", s, p, *(p+1), p+1);
strcpy (s, "\nacesta este un exemplu de lucru cu pointeri");
printf ("%s", s);
p += 17;
for (; *p != '\0'; ++p) {
if (*p == 'e')
*p = 'E';
if (*p == ' ')
*p = '\n';
}
printf ("%s\n", s);
return 0;
}
Programul va afişa următoarele linii:
a b c
ABC ABC B BC
acesta este un exemplu de lucru cu pointeri
acesta este un exEmplu
dE
lucru
cu
pointEri
Să se scrie o funcţie cu acelaşi efect şi antet ca şi funcţia
char buf[512]; // aici se citeşte un şir
char *p; // adresă şir alocat dinamic
scanf("%s",buf); // citire şir
p=strdup(sir); // alocă memorie şi copiază şir la adresa p
Funcţia declarată trebuie să respecte următorul antet:
char* my_strdup (char *s)
Scrieţi o funcţie care înlocuieşte într-un şir
Funcţia declarată trebuie să respecte următorul antet:
char* my_replace(char *s, char *s1, char *s2)
Intrare | Ieşire |
imi nu-mi mie imi plac pointerii |
mie nu-mi plac pointerii |
Să se scrie un program care citește numere de la tastatură până la întâlnirea numărului
Pentru acest lucru, vom avea nevoie de următoarele variabile:
Se va porni cu o capacitate ințială (de exemplu,
Intrare | Ieşire |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Să se scrie un program pentru citirea unor cuvinte (de la tastatură) şi afişarea numărului de apariţii al fiecărui cuvânt. Cuvintele au maxim 19 litere fiecare.
Se va folosi un vector de pointeri la cuvinte şi un vector de numere întregi. Variante:
Intrare | Ieşire |
6 ana are mere are mere mere |
ana 1 are 2 mere 3 |
Liniarizarea unei matrici. Să considerăm următoarea problemă: dorim să calculăm
Să considerăm că am ales să rezolvăm problema în următorul mod: definim o matrice
Acest algoritm rezolvă problema, dar prezintă un dezavantaj. Pentru calculul unei valori, trebuie păstrată în memorie o matrice de dimensiuni relativ mari, care ocupă multă memorie. În plus, observăm că pentru a calcula
Avem acum două optiuni:
Să se scrie un program care calculează valoarea lui
Intrare | Ieşire |
5 3 |
10 |
12 11 |
12 |