44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Passing pointers to funtions
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Passing pointers to funtions
							 | 
						||
| 
								 | 
							
								C allows passing a pointer to a function. To achieve this, simply declare the parameters as pointer type.
							 | 
						||
| 
								 | 
							
								This way of passing references to functions is useful when you want to modify variables that are out of the scope of that function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```C
							 | 
						||
| 
								 | 
							
								// incorrect implementation of swap
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								void swap(int a, int b){
							 | 
						||
| 
								 | 
							
								    int c;
							 | 
						||
| 
								 | 
							
								    c = a;
							 | 
						||
| 
								 | 
							
								    a = b;
							 | 
						||
| 
								 | 
							
								    b = c;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								int main(){
							 | 
						||
| 
								 | 
							
								    int var1 = 10;
							 | 
						||
| 
								 | 
							
								    int var2 = 20;
							 | 
						||
| 
								 | 
							
								    swap(var1, var2);
							 | 
						||
| 
								 | 
							
								    printf("Value of var1: %d \n", var1); // prints 10
							 | 
						||
| 
								 | 
							
								    printf("Value of var2: %d \n", var2); // prints 20
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								In this code example the swap function does not work as intended since it swaps two variables that exist only inside the scope of that function. To fix this we make a modification as shown below.
							 | 
						||
| 
								 | 
							
								```C
							 | 
						||
| 
								 | 
							
								// correct implementation of swap
							 | 
						||
| 
								 | 
							
								#include <stdio.h>
							 | 
						||
| 
								 | 
							
								void swap(int* a, int* b){
							 | 
						||
| 
								 | 
							
								    int c = *a;
							 | 
						||
| 
								 | 
							
								    *a = *b;
							 | 
						||
| 
								 | 
							
								    *b = c;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								int main(){
							 | 
						||
| 
								 | 
							
								    int var1 = 10;
							 | 
						||
| 
								 | 
							
								    int var2 = 20;
							 | 
						||
| 
								 | 
							
								    swap(&var1, &var2);
							 | 
						||
| 
								 | 
							
								    printf("Value of var1: %d \n", var1); // prints 20
							 | 
						||
| 
								 | 
							
								    printf("Value of var2: %d \n", var2); // prints 10
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								In the second code example you were able to change the values of the variables only because you were constantly de-referencing a pointer within the function instead of trying to change the values directly
							 |