double ** dmatalloc(size_t nrows, size_t ncols) { double ** mat = malloc( nrows*sizeof(double*) + nrows*ncols*sizeof(double) ); mat[0] = (double *) &mat[nrows]; for(size_t ii = 1; ii < nrows; ++ii) { mat[ii] = &mat[ii-1][ncols]; } return mat; } void dmatfree(double** mat) { free(mat); } static void reverse_helper(char * str, size_t ii, size_t jj) { // Exchange characters char tmp = str[ii]; str[ii] = str[jj]; str[jj] = tmp; // Check next move ii++; jj--; if( ii >= jj) { return; } reverse_helper(str,ii,jj); } // Requires a '\0' terminated string void reverse(char * str) { size_t str_length = 0; while( str[str_length] != '\0') { str_length++; } if (str_length == 0) return; reverse_helper(str,0,str_length-1); }