// file: lecture_12/example.cc // // local include files // #include "example.h" // method: main // // main program starts here // int main(int argc, char** argv) { // declare a character string // /* char str[] = "Alex"; fprintf(stdout, "str = %s\n", str); fprintf(stdout, "str[0] = %c (%d)\n", str[0], str[0]); fprintf(stdout, "str[1] = %c (%d)\n", str[1], str[1]); fprintf(stdout, "str[2] = %c (%d)\n", str[2], str[2]); fprintf(stdout, "str[3] = %c (%d)\n", str[3], str[3]); fprintf(stdout, "str[4] = %c (%d)\n", str[4], str[4]); // note that argv[1] is a character string // fprintf(stdout, "argv[1] = %s\n", argv[1]); // let's declare a floating-point array // // long N = 3; // float x[N]; float x[atoi(argv[2])]; x[0] = 1.0; x[1] = 2.0; x[2] = 3.0; fprintf(stdout, "x[0] = %f (%f)\n", x[0], x[0]); fprintf(stdout, "x[1] = %f (%f)\n", x[1], x[1]); fprintf(stdout, "x[2] = %f (%f)\n", x[2], x[2]); // use a more flexible format for declaring an array // float y[] = {1.0, 2.0, 3.0}; fprintf(stdout, "y[0] = %f (%f)\n", y[0], y[0]); fprintf(stdout, "y[1] = %f (%f)\n", y[1], y[1]); fprintf(stdout, "y[2] = %f (%f)\n", y[2], y[2]); // arrays can be multidimensional // float z[2][9][27][99][35]; z[0][0][0][0][0] = 0.0; z[0][0][0][0][1] = 27.0; z[0][0][0][0][34] = 99.0; fprintf(stdout, "z[0][0][0][0][0] = %f\n", z[0][0][0][0][0]); fprintf(stdout, "z[0][0][0][0][1] = %f\n", z[0][0][0][0][1]); fprintf(stdout, "z[0][0][0][0][34] = %f\n", z[0][0][0][0][34]); // introduce a pointer // fprintf(stdout, "---- pointers ----\n"); float joe = 27.0; float* ptr = &joe; fprintf(stdout, "joe = %f\n", joe); fprintf(stdout, "the memory location for joe is %p (%u) (%f)\n", ptr, ptr, *ptr); // interpret a float as an int // int* iptr = (int*)ptr; fprintf(stdout, "the memory location for joe is %p (%u) (%ld)\n", iptr, iptr, *iptr); // increment a pointer // float y[] = {1.0, 2.0, 3.0, 4.0, 5.0}; float* z = y; fprintf(stdout, "y[0] = %f\n", *z); z++; fprintf(stdout, "y[1] = %f\n", *z); z++; fprintf(stdout, "y[2] = %f\n", *z); // create a multidimensional array // float y[2][3]; float* z = (float*)y; y[0][0] = 1.0; y[0][1] = 2.0; y[0][2] = 3.0; y[1][0] = 4.0; y[1][1] = 5.0; y[1][2] = 6.0; for (long i = 0; i < 2; i++) { for (long j = 0; j < 3; j++) { fprintf(stdout, "%f (%f) ", y[i][j], *z++); } fprintf(stdout, "\n"); } */ // explain a pointer to a pointer // fprintf(stdout, "=====\n"); fprintf(stdout, "argv = %u\n", argv); fprintf(stdout, "argv[0] = %s (%u)\n", argv[0], argv[0]); fprintf(stdout, "argv[1] = %s (%u)\n", argv[1], argv[1]); fprintf(stdout, "argv[2] = %s (%u)\n", argv[2], argv[2]); fprintf(stdout, "=====\n"); fprintf(stdout, "argv[0] = %s\n", argv[0]); fprintf(stdout, "argv[0][0] = %c\n", argv[0][0]); fprintf(stdout, "argv[0][1] = %c\n", argv[0][1]); // we can use pointers with functions // float* ptr = new float[1]; *ptr = 27.0; fprintf(stdout, "BEFORE: %f\n", *ptr); bool status = myfunct(ptr); fprintf(stdout, "AFTER: %f\n", *ptr); delete [] ptr; // allocate an array // float* jordan = new float[99]; delete [] jordan; // to review: char's use null-terminated strings // char aaa[] = "Joe"; float bbb[] = {1.0, 2.0, 3.0}; // exit gracefully // exit(0); } bool myfunct(float* x) { *x = 99.0; return true; }