#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 500 // Maximum allowed characters
int main(void)
{
char buffer[MAXSIZE + 1];
char *text[10];
int i;
long size = 0;
printf("Please enter 10 sentences:\n\n");
for (i = 0; i < 10; i++)
{
printf("%d : ", i + 1);
fgets(buffer, MAXSIZE, stdin); // gets_s not always supported
int nb_bytes = strlen(buffer);
text[i] = (char *)malloc(nb_bytes + 1); // To hold \0 character
// In case there is not enough memory, etc.
if (text[i] == NULL)
{
printf("ERROR: not enough memory!\n");
exit(-1);
}
strcpy(text[i], buffer); // copy sentence at the address returned by malloc
size += nb_bytes;
}
printf("Print the 10 sentences:\n\n");
for (i = 0; i < 10; i++)
{
printf("%s\n", text[i]);
}
printf("Total memory to store the sentences: %ld bytes intead of %d\n\n", size, 10 * MAXSIZE);
return 0;
}
#include <stdio.h>
#include <string.h>
#define L 2
#define C 3
int main(void)
{
int m[L][C] = { { 0, 1, 2},
{10,11,12}, };
printf(" 0 1 2\n10 11 12\n\n");
int l = 0, c;
for (; l < L; l++)
{
for (c = 0; c < C; c++)
{
printf("m[%d][%d] = %2d a l'adresse %x (%ld) \n", l, c, m[l][c], &m[l][c], &m[l][c]);
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define L 2
#define C 3
int main(void)
{
int m[L][C] = { { 0, 1, 2},
{10,11,12},
};
int* ptr;
int i, l, c;
ptr = (int*)m;
printf("m = 0x%X &m = 0x%X \n\n", m, &m);
printf("m[0] = 0x%X &m[0] = 0x%X \n\n", m[0], &m[0]);
printf("m[1] = 0x%X &m[1] = 0x%X \n\n", m[1], &m[1]);
printf("m[0][0] = 0x%X &m[0][0] = 0x%X \n\n", m[0][0], &m[0][0]);
printf("m = %p &m= %p \n\n", m, &m);
l = c = 0;
for (i = 0; i < L * C; i++)
{
printf("m[%d]=0x%X, &m[%d][%d]=0x%X (ptr+%d)=%X: *(ptr+%d) = %d\n", l, m[l], l, c, &m[l][c], i, (ptr + i), i, *(ptr + i));
c++;
if (c >= C)
{
c = 0;
l++;
printf("\n");
}
}
printf("\n\n");
return 0;
}
#include <stdio.h>
#include <string.h>
#define ROWS 2
#define COLUMNS 3
int main(void)
{
int m[ROWS][COLUMNS] =
{
{0, 1, 2},
{10, 11, 12}};
// m is of type int (*)[3] => pointer to array of 3 ints
printf("%d\n", m[1][2] + 3);
printf("%d\n", (*(m + 1))[2] + 3);
printf("%d\n", *(m[1] + 2) + 3);
printf("%d\n", *(*(m + 1) + 2) + 3);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLUMNS 5
int main(void)
{
int **matrix;
int i, j;
// Reserve an array with 3 pointers (one for each row)
matrix = (int **)malloc(sizeof(int *) * ROWS);
if (matrix == NULL) exit(-1);
// Reserve 5 columns per row
for (i = 0; i < ROWS; i++)
{
matrix[i] = (int *)malloc(sizeof(int) * COLUMNS);
if (matrix[i] == NULL) exit(-1);
}
// Initialize elements
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLUMNS; j++)
{
matrix[i][j] = (i + 1) + j;
}
}
printf("%p\n", matrix);
printf("%p\n", matrix + 1);
printf("%p\n", matrix[2]);
printf("%p\n", matrix[2] + 1);
// Print matrix
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < COLUMNS; j++)
{
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
// Free memory
for (i = 0; i < ROWS; i++)
{
free(matrix[i]);
}
free(matrix);
matrix = NULL;
return 0;
}