I am doing a procedure and it’s working but I’m not sure if it’ll work in all cases as it’s not conventional.
void func (int &num){
num=blah;
}
int main() {
int num;
func(num);
}
I know the conventional way of doing this is as below but still I have a lot of code in the previous format I prefer not to change as it works just fine. What I don’t understand is whether I’m just being lucky.
void func (int* num){
*num=blah;
}
int main() {
int num;
func(&num);
}
In fact there is a bit more complicated version of it as well:
void func(float* &list){
list=new float[3];
}
int main() {
float *list;
func(list);
}
which again I understand the conventional way of doing it is as below.
void func(float** list){
*list=new float[3];
}
int main(){
float *list;
func(&list);
}
Your help is much appreciated as I’m in total confusion.
Your first example is correct – you’re passing an
intby reference tofunc().Your second example also fine (now that you’ve edited it). In this case, you’re passing an
int *by value tofunc().Your third and fourth examples are also both correct. In the third, you’re passing a
float *by reference. In the second case, you’re passing afloat **by value (which is semantically similar to passing afloat *by reference, which might be why you’re confusing them).There’s nothing “conventional” or “unconventional” about any of your example code. All of it is 100% correct and will work fine. Though there are some subtle semantic differences between passing pointers by value and passing by references, these examples are ok.