Printing pointer addresses in C [two questions]

前端 未结 5 882
感动是毒
感动是毒 2021-01-04 14:02

I know that my questions are very simple but googleing them didn\'t get me any useful results... They\'r probably too simple!!

No. 1

char* createStr(         


        
5条回答
  •  余生分开走
    2021-01-04 14:17

    Comments inline!

    No. 1

    #include 
    #include 
    
    char* createStr(){
        char* str1 = malloc(10 * sizeof(char));
        /* str1 is a local variable which is allocated in 
           stack and not in heap */
        /* But the dynamic memory allocation is done in 
           heap so malloc returns a portion of memory from
           heap and str1 is made to point to that!
        */
        /*
        aaaa (stack)    bbbb (heap)
        +--------+      +-+-+-------+-+
        |  str1  |----->|0|1| ..... |9|
        +--------+      +-+-+-------+-+
        */
    
        printf("address of str1 in memory : %p\n", &str1);
        /* prints aaaa and not bbbb */
        /* to print the base address of the allocated memory, 
        printf("str1 address in memory : %p\n", str1);
        */
        printf("address of the allocated memory inside func : %p\n", str1);
    
        return str1;
    }
    
    int main(void){
        char* str2 = createStr();
        /* str2 is a local variable to main and so it is
           allocated in the stack 
        */
        /*
        cccc (stack)    bbbb (heap)
        +--------+      +-+-+-------+-+
        |  str2  |----->|0|1| ..... |9|
        +--------+      +-+-+-------+-+
        */
        printf("address of str2 in memory : %p\n", &str2);
        /* the above will print the address of the str2 
           (which is cccc) but not where it is pointing 
           to (bbbb) ..
        */
        /* So to print the base address of where it is 
           pointing to (bbbb), 
        printf("str2 address in memory : %p\n", str2);
        */
        printf("address of the allocated memory inside main : %p\n", str2);
    }
    

    No 2.

    #include 
    
    int atoi(char a[])
    {
            int i, n=0;
    
            for (i=0 ; a[i] >= '0' && a[i] <= '9' ; i++)
                    n = 10 *n + (a[i]-'0');
    
            return n;
    }
    
    int main(int argc, char *argv[]){
        printf("Basename is %s ", (char*) argv[0]);
        if(argc > 1 ){
            printf("and integer arg is : %d.\n", atoi(argv[1]));
        }
    }
    
    
    $ gcc atoi.c -o atoi
    $ ./atoi 3
    Basename is ./atoi and integer arg is : 3.
    $
    

    Point to note:

    • w.r.t #2 : in main() it should be char * argv[] and not int * argv[]

提交回复
热议问题