Browse Source

safeCompare now accepts any types as input; added some code examples for gandling of multidimensional arrays

master
T. Meissner 10 years ago
parent
commit
c8b574f0be
1 changed files with 41 additions and 12 deletions
  1. +41
    -12
      c_pointers/chapter_4.c

+ 41
- 12
c_pointers/chapter_4.c View File

@ -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;


Loading…
Cancel
Save