From c8b574f0bee6a833031da4e54845cce32cf20c96 Mon Sep 17 00:00:00 2001 From: tmeissner Date: Mon, 12 May 2014 01:05:40 +0200 Subject: [PATCH] safeCompare now accepts any types as input; added some code examples for gandling of multidimensional arrays --- c_pointers/chapter_4.c | 53 ++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/c_pointers/chapter_4.c b/c_pointers/chapter_4.c index 7af97c9..9a7f8d4 100644 --- a/c_pointers/chapter_4.c +++ b/c_pointers/chapter_4.c @@ -4,7 +4,7 @@ void displayArray(int arr[], size_t size); void displayArrayPtr(int *arr, size_t size); -int safeCompare(const unsigned char *a, const unsigned char *b, size_t asize, size_t bsize); +int safeCompare(const void *a, const void *b, size_t asize, size_t bsize); int valid(void *p); @@ -26,13 +26,14 @@ void displayArrayPtr(int *arr, size_t size) { } -int safeCompare(const unsigned char *a, const unsigned char *b, size_t asize, size_t bsize) { +int safeCompare(const void *a, const void *b, size_t asize, size_t bsize) { if (asize != bsize) { return -1; } int value = 0; for (size_t i = 0; i < asize; i++) { - value |= a[i] ^ b[i]; + //value |= a[i] ^ b[i]; + value |= ((char*) a)[i] ^ ((char*) b)[i]; } return value; } @@ -104,19 +105,47 @@ int main(void) { // pointers and multidimensional arrays { + // declare a 2-dimensional array int matrix[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}; - for (size_t i=0; i<2; i++) { - + for (size_t i = 0; i < 2; i++) { + for (size_t j = 0; j < 5; j++) { + printf("matrix[%zu][%zu] Address: %p Value %d\n", i, j, &matrix[i][j], matrix[i][j]); + } } + // declare a pointer to a 2-dimensional array + int (*pmatrix)[5] = matrix; + + // 1st row + printf("%p\n", matrix); + // 2nd row + printf("%p\n", matrix + 1); + // size of 1st row + printf("sizeof(matrix[0]): %zu\n", sizeof(matrix[0])); + // access 2nd element + printf("%p %d\n", matrix[0] + 1, *(matrix[0] + 1)); } - unsigned char a[] = "wurst"; - unsigned char b[] = "wurst"; - - if(safeCompare(a, b, sizeof(a), sizeof(b))) { - printf("%s ungleich %s\n", a, b); - } else { - printf("%s gleich %s\n", a, b); + // test safeCompare function + { + // test with char parameters + char a[] = "wurst"; + char b[] = "wurst"; + + if(safeCompare(a, b, sizeof(a), sizeof(b))) { + printf("%s ungleich %s\n", a, b); + } else { + printf("%s gleich %s\n", a, b); + } + + // test with int parameters + int bla[] = {0,1,2,3,4}; + int bli[] = {0,1,2,3,4}; + + if(safeCompare(bla, bli, sizeof(bla), sizeof(bli))) { + printf("%s ungleich %s\n", "bla", "bli"); + } else { + printf("%s gleich %s\n", "bla", "bli"); + } } return 0;