I'm relatively new to C and I was pretty sure I had a decent understanding of pointers and how they are used. However, I was just playing around with the concept of Pass by Reference and came across a bit of a delima. Hopefully someone can help explain this to me....
I have 2 small programs to test my knowledge of pass by reference and I wanted them both to have the same results however they do not:
Program 1
Code:
#include <stdlib.h>
#include <stdio.h>
int main(){
char* hostname= (char*)calloc(10, sizeof(hostname));
hostname = "unchanged";
printf("Address of hostname = %d\n", &hostname);
someFunction(&hostname);
printf("Hostname: %s\n", hostname);
return 0;
}
someFunction(char** s){
printf("s = %d\n", s);
printf("Address of s = %d\n", &s);
printf("*(&s) = %d\n", *(&s));
*s = "changed";
}
Program 2
Code:
#include <stdlib.h>
#include <stdio.h>
int main(){
char* hostname = (char*)calloc(10, sizeof(hostname));
hostname = "unchanged";
printf("Address of hostname = %d\n", &hostname);
someFunction(&hostname);
printf("Hostname: %s\n", hostname);
return 0;
}
someFunction(char* s){
printf("s = %d\n", s);
printf("Address of s = %d\n", &s);
printf("*(&s) = %d\n", *(&s));
*(&s) = "changed";
}
The results of Program 1 gives me what I expected which was hostname being changed to "change":
Address of hostname = -1073845548
s = -1073845548
Address of s = -1073845584
*(&s) = -1073845548
Hostname: changed
The results of Program 2 do not give me what I expected. Can someone please tell my why hostname does not get "changed" in this example?
Address of hostname = -1074574892
s = -1074574892
Address of s = -1074574928
*(&s) = -1074574892
Hostname: unchanged