Directly assigning values to C Pointers

后端 未结 3 643
后悔当初
后悔当初 2020-12-04 10:53

I\'ve just started learning C and I\'ve been running some simple programs using MinGW for Windows to understand how pointers work. I tried the following:

#in         


        
3条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-04 11:21

    First Program with comments

    #include 
    
    int main(){
        int *ptr;             //Create a pointer that points to random memory address
    
        *ptr = 20;            //Dereference that pointer, 
                              // and assign a value to random memory address.
                              //Depending on external (not inside your program) state
                              // this will either crash or SILENTLY CORRUPT another 
                              // data structure in your program.  
    
        printf("%d", *ptr);   //Print contents of same random memory address
                              // May or may not crash, depending on who owns this address
    
        return 0;             
    }
    

    Second Program with comments

    #include 
    
    int main(){
        int *ptr;              //Create pointer to random memory address
    
        int q = 50;            //Create local variable with contents int 50
    
        ptr = &q;              //Update address targeted by above created pointer to point
                               // to local variable your program properly created
    
        printf("%d", *ptr);    //Happily print the contents of said local variable (q)
        return 0;
    }
    

    The key is you cannot use a pointer until you know it is assigned to an address that you yourself have managed, either by pointing it at another variable you created or to the result of a malloc call.

    Using it before is creating code that depends on uninitialized memory which will at best crash but at worst work sometimes, because the random memory address happens to be inside the memory space your program already owns. God help you if it overwrites a data structure you are using elsewhere in your program.

提交回复
热议问题