Giriş
C dilinde pass by reference diye bir şey yoktur. Açıklaması şöyle
C dilinde pass by reference diye bir şey yoktur. Açıklaması şöyle
The C language is pass-by-value without exception. Passing a pointer as a parameter does not mean pass-by-reference.
Çünkü C ve C++ farklı dillerdir. Açıklaması şöyle
Currently, C++ includes neither in its entirety, although the common subset of C and C++ is significant. Some features are missing, and there are incompatible differences between the languages.
Her iki dilin örtüştüğü alan fazla olsa da bazı farklılıklar gösterebilirler. Bunu şeklen şöyle düşünmek lazım
+------------------------------+
| Valid C++ Only |
| |
| +-----------------------+-------+
| | Valid C and C++ with | Valid |
| | identical behavior | C |
| | | Only |
| | | |
| | | |
| +-----------------------+ |
| | Valid C and C++ with | |
| | different behavior | |
| +-----------------------+-------+
| |
| |
+------------------------------+
C++ kabaca şu C standartları ile uyumludur.
C++20 is based on C18C++17 is based on C11C++14 is based on C99C++11 is based on C99C++03 is based on C89/C90C++98 is based on C89/C90
C++ Kodunu C Haline Getirmek
Şu kod C++ tarafından derlenir ve çalışır.
Şu kod C++ tarafından derlenir ve çalışır.
#include <stdio.h>
void swap(int & x, int & y)
{
int z = x;
x = y;
y = z;
}
int main()
{
int a = 0, b = 1;
swap(a, b);
printf("a is now %d\n", a);
printf("b is now %d\n", b);
}
Bu kodu C'de çalıştırmak için şöyle yaparız. swap metodundaki parametreler pointer haline geldi ve metodun çağırırken & kullanımına dikkat.#include <stdio.h>
void swap(int* const x, int* const y)
{
int z = *x;
*x = *y;
*y = z;
}
int main()
{
int a = 0, b = 1;
swap(&a, &b);
printf("a is now %d\n", a);
printf("b is now %d\n", b);
}
C Kodu Haline Getirince de Pass By Reference Olmaz - Illusion of pass-by-referencePointer'lar her zaman pass by value ile çalışır.
Örnek
Elimizde şöyle bir kod olsun
#include <stdio.h>
void function2(int *param) {
printf("I've received value %d\n", *param);
(*param)++;
}
int main(void) {
int variable = 111;
function2(&variable);
printf("variable %d\n", variable);
return 0;
}
Çıktı olarak şunu alırız. Burada sanki pointer pass by reference ile geçiyormuş gibi görünür.
I've received value 111
variable=112
Ancak kodu şöyle değiştirelim
#include <stdio.h>
void function2(int *param) {
printf("param's address %d\n", param);
param = NULL; //Bu satıra dikkat
}
int main(void) {
int variable = 111;
int *ptr = &variable;
function2(ptr);
printf("ptr's address %d\n", ptr);
return 0;
}
Çıktı olarak şunu alırz. Eğer pointer reference olarak geçseydi değeri metod çıkışında null olurdu ancak olmadı.
param's address -1846583468
ptr's address -1846583468
Hiç yorum yok:
Yorum Gönder