Tại sao phải khai báo tham chiếu

Mọi người cho em hỏi tại sao phải khai báo tham chiếu tại cái hàm addValue(), deleteAllValue(), và hàm execute() ạ?
Đây là code của em ạ

#include <stdio.h>

void copyArray(int arr[],int arrCopy[], int n){
	
	for(int i = 0;i<n;i++){
		arrCopy[i] = arr[i];
	}
}
void swap(int &a,int &b){
	int temp;
	temp = a;
	a = b;
	b = temp;
}
void addValue(int arr[], int &i){
	printf("\nEnter the number: ");
	scanf("%d", &arr[i]);
	i++;
}

void display(int arr[], int n){
	for(int i =0;i<n;i++){
		printf("\t%d", arr[i]);
	}
}
void searchValue(int arr[], int n){
	printf("\Enter the value to search: ");
	int x;
	int count = 0;
	scanf("%d", &x);
	for(int i=0;i<n;i++){
		if(arr[i] == x){
			count = 1;
		}
	}
	
	if(count == 1){
		for(int i=0;i<n;i++){
			if(arr[i] == x )
			printf("%d", i);
		}
	}
	
	if(count == 0){
		printf("\nThis number not exist");
	}
}

void deleteFirstValue(int arr[], int &n){
	printf("\nEnter the number to delete: ");
	int x;
	int count =0;
	scanf("%d", &x);
	for(int i=0;i<n;i++){
		if(arr[i] == x){
			count = 1;
		}
	}
	
	if(count = 1){
		for(int i=0;i<n;i++){
			if(arr[i] == x){
			for(int j =i;j<n;j++){
				swap(arr[j],arr[j+1]);
			 }
			 n--;
			 break;
		}
		}
		display(arr,n);
	}
	
	if(count == 0){
		printf("\nThe number not exist");
	}
}

void deleteAllValue(int arr[], int &n){
	printf("\nEnter the number to delete: ");
	int x;
	int count =0;
	scanf("%d", &x);
	for(int i=0;i<n;i++){
		if(arr[i] == x){
			count = 1;
		}
	}
	
	if(count = 1){
		for(int i=0;i<n;i++){
			if(arr[i] == x){
			for(int j =i;j<n;j++){
				swap(arr[j],arr[j+1]);
			 }
			 n--;
			 i--;
		}
		}
		display(arr,n);
	}
	
	if(count == 0){
		printf("\nThe number not exist");
	}
}
void increase(int arr[], int n){
	int arrCopy[100];
	copyArray(arr,arrCopy,n);
	for(int i =0;i<n;i++){
		for(int j=i+1;j<n;j++){
			if(arr[i] > arr[j]){
				swap(arr[i],arr[j]);
			}
		}
	}
	display(arrCopy,n);
}
void execute(int arr[],int &n,int option){
	switch(option){
		case 1:{
			addValue(arr,n);
			break;
		}
		case 2:{
			searchValue(arr,n);
			break;
		}
		case 3:{
			deleteFirstValue(arr,n);
			break;
		}
		case 4:{
			deleteAllValue(arr,n);
			break;
		}
		case 5:{
			display(arr,n);
			break;
		}
		case 6:{
			increase(arr,n);
			break;
		}
	}
}


void displayMenu(){
	int arr[100];
	int n=0;
	int option;
	do{
	printf("\nChoose option:");
	printf("\n1.Add");
	printf("\n2.Search");
	printf("\n3.Delete first");
	printf("\n4.Delete all");
	printf("\n5.Display");
	printf("\n6.Increase\n");
	scanf("%d", &option);
	execute(arr,n,option);
}while(1);
}

int main(){
	displayMenu();
}
  1. Bạn đang dùng nửa C, nửa C++.
  2. Khai báo tham chiếu khi muốn thay đổi giá trị truyền vào.
    • Như trong addValue() thì có thay đổi i++.
    • deleteallValue() thì có n--.
4 Likes

Vâng ạ. Anh cho em hỏi khi em gọi hàm addValue(arr,n) ở hàm execute thì có phải là mọi thay đổi của biến tham chiếu i ở hàm addValue cũng sẽ dẫn đến thay đổi của n ở hàm execute đúng không ạ ?

Không hẳn, vì hai biến local ở hai hàm khác nhau :slight_smile: nhưng mà đúng vậy.

4 Likes

Đúng thế. n trong excute() khi truyền vào hàm addValue() thì nó thành i trong addValue().
Tên tham số thì đặt sao cũng được mà.

3 Likes

Dạ vâng em hiểu rồi. Em cảm ơn ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?