Search
#include <stdio.h> void f1(int a[], int n, char nazev); void f2(int *a, int n, char nazev); int main() { int a[2]; // deklarace pole, prvky neinicializovany // a[i], i = <0,1> printf("neinicializovane pole\n"); for (int i = 0; i < 2; i++) { printf("a[%d]=%d\n", i, a[i]); } a[0] = 10; a[1] = 20; printf("inicializovane pole\n"); for (int i = 0; i < 2; i++) { printf("a[%d]=%d\n", i, a[i]); } int b[] = {3, 5, 8}; // triprvkove pole, velikost je urcena automaticky int c[5] = {6, 3}; // petiprvkove, 6, 3, 0, 0, 0 - automaticky 0 u neinit. // init. prvnich N z M, N <= M int d[5] = {[3] = 9}; // 0 0 0 9 0 // prvek s indexem inicializovan, zbytek 0 int e[] = {[3] = 9}; // 0, 0, 0, 9 int f[10] = {0}; // 10x 0 printf("velikost pole e: %lu\n", sizeof(e)/sizeof(int)); f1(c, sizeof(c)/sizeof(int), 'c'); f1(d, sizeof(d)/sizeof(int), 'd'); f1(e, sizeof(e)/sizeof(int), 'e'); f1(f, sizeof(f)/sizeof(int), 'f'); int *A; A = d; // ukazatel A odkazuje na pamet, kde zacina pole d f1(A, sizeof(d)/sizeof(int), 'A'); for (int i = 0; i < 5; i++) { printf("A[%d]=%d\n", i, A[i]); } f2(e, sizeof(e)/sizeof(int), 'e'); // int h[10000000]; pozadavek na prilis mnoho pameti v zasobniku return 0; } void f1(int a[], int n, char nazev) // ~ void f1(int *a, int n, char nazev) { // printf("test velikosti pole a: %lu\n", sizeof(a)/sizeof(int)); // neni moc pouzitelne, vraci velikost ukazatele, tj. sizeof(int *) printf("%c: ", nazev); for (int i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } void f2(int *a, int n, char nazev) { printf("%c: ", nazev); for (int i = 0; i < n; i++) printf("%d ", *(a+i)); // pozor na smysl dereference: *a+i je spatne printf("\n"); }
#include <stdlib.h> int main() { // volani malloc(pocet bytu) vrati adresu v dynamicke pameti, pokud to bylo uspesne volani // adresa je datoveho typu void*, je vhodné ji přetypovat int *a, *b; const int n = 4; a = (int *)malloc(n*sizeof(int)); b = (int *)calloc(n, sizeof(int)); if (a == NULL) { // kontrola, zda se podařilo alokovat potřebnou pamět, měla by být vždy // zde chybí kontrola pole b printf("nedarilo ze alokovat!\n"); return 100; } else { printf("adresa alokovaneho prostoru: %p\n", a); for (int i = 0; i < n; i++) *(a+i) = i; for (int i = 0; i < n; i++) printf("a[%d]=%d\n", i, a[i]); for (int i = 0; i < n; i++) printf("b[%d]=%d\n", i, b[i]); free(a); free(b); } return 0; }
3 3.14 5.34 8.33
$ ./a.out < in.txt
#include <stdlib.h> #include <stdio.h> int main() { int n, m = 0; float b; scanf("%d", &n); float *p = (float *)malloc(n*sizeof(float)); for (int cnt=0;cnt<n;cnt++){ scanf("%f", &b); p[cnt]= b; cnt++; printf("%2.2f\n", b); } printf("pole: "); for (int i = 0; i < n; i++) { printf("%2.2f ", p[i]); } printf("\n"); free(p); return 0; }