Sorry, another C pointer question.. I have a function func() that sorts an array, then get the largest and smallest integers. I’m trying to put them inside pointer variables in main() but the values are only correct inside the func() function. I don’t understand why 🙁
#include <stdio.h>
void func(int arr[], int *s, int *l, int n){
int i = 1;
for(; i < n; i++){
int temp = arr[i];
int n = i;
while( n > 0 && arr[n-1] > temp){
arr[n] = arr[n-1];
n--;
}
arr[n] = temp;
}
l = &arr[n-1];
s = &arr[0];\
printf("%d %d\n",*l,*s);
}
int main(void){
int arr[] = {1,2,9,3,58,21,4};
int *s, *l;
int size = 7;
func(arr,s,l,size);
printf("%d %d\n",*l,*s);
}
When you pass a pointer as an argument to a function in C, a copy of the pointer is made. Thus, changing the value of the pointer has no effect outside of that function. However, changing the value at the memory referenced by the pointer will take effect everywhere, as you want. In your case, you would need to do this:
Of course, the way you’re using the pointers in
mainis also incorrect; they’re uninitialized and likely to cause a segmentation fault. Since there appears to be no reason to use actualint*variables over ordinaryintvariables there, we can take another approach to passing them “by reference”:Note that the term “by reference” here is not correct in the true sense of the phrase, since you are still receiving a copy of the address associated with the variable. Most languages provide a true by-reference faculty by removing this distinction and only allowing you access to the variable and its value, with the copying somewhat out of sight of the programmer. You can think of this as being “by reference with respect to
landsinsidemain“, in the sense that their values can change due to the called function.