এটি পাস-বাই-রেফারেন্স নয়, এটি অন্যের বক্তব্য অনুসারে পাস-বাই-ভ্যালু।
সি ভাষাটি ব্যতিক্রম ব্যতীত মূল্য দিয়ে যায়। প্যারামিটার হিসাবে পয়েন্টার পাস করার অর্থ পাস-বাই-রেফারেন্স নয়।
নিয়মটি নিম্নলিখিত:
একটি ফাংশন প্রকৃত পরামিতি মান পরিবর্তন করতে সক্ষম নয়।
আসুন কোনও ফাংশনের স্কেলার এবং পয়েন্টার পরামিতিগুলির মধ্যে পার্থক্যগুলি দেখার চেষ্টা করি।
স্কেলার ভেরিয়েবল
এই সংক্ষিপ্ত প্রোগ্রামটি স্কেলার ভেরিয়েবল ব্যবহার করে পাস-বাই-মান দেখায়। param
ফর্মাল প্যারামিটার এবং variable
ফাংশন আমন্ত্রণকে প্রকৃত প্যারামিটার বলা হয়। param
ফাংশনে নোট বৃদ্ধি বৃদ্ধি পায় না variable
।
#include <stdio.h>
void function(int param) {
printf("I've received value %d\n", param);
param++;
}
int main(void) {
int variable = 111;
function(variable);
printf("variable %d\m", variable);
return 0;
}
ফলাফল হলো
I've received value 111
variable=111
পাস-রেফারেন্সের বিভ্রম
আমরা কোডের টুকরোটি কিছুটা পরিবর্তন করি। param
এখন পয়েন্টার।
#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;
}
ফলাফল হলো
I've received value 111
variable=112
এটি আপনাকে বিশ্বাস করে যে প্যারামিটারটি রেফারেন্স দ্বারা পাস হয়েছিল। এটা ছিল না. এটি মান দ্বারা পাস করা হয়েছিল, পরম মান একটি ঠিকানা। ইন্ট টাইপের মান বাড়ানো হয়েছিল এবং এটি সেই পার্শ্ব প্রতিক্রিয়া যা আমাদের মনে করে যে এটি কোনও পাস-রেফারেন্স ফাংশন কল ছিল।
পয়েন্টার - মান দ্বারা উত্তীর্ণ
কীভাবে আমরা সেই সত্যটি প্রদর্শন / প্রমাণ করতে পারি? ওয়েল, সম্ভবত আমরা স্কেলার ভেরিয়েবলগুলির প্রথম উদাহরণ চেষ্টা করতে পারি, তবে স্কেলারের পরিবর্তে আমরা ঠিকানাগুলি (পয়েন্টার) ব্যবহার করি। দেখা যাক এটি সাহায্য করতে পারে কিনা।
#include <stdio.h>
void function2(int *param) {
printf("param's address %d\n", param);
param = NULL;
}
int main(void) {
int variable = 111;
int *ptr = &variable;
function2(ptr);
printf("ptr's address %d\n", ptr);
return 0;
}
ফলাফলটি হবে যে দুটি ঠিকানা সমান (সঠিক মান সম্পর্কে চিন্তা করবেন না)।
উদাহরণ ফলাফল:
param's address -1846583468
ptr's address -1846583468
আমার মতে এটি স্পষ্টভাবে প্রমাণ করে যে পয়েন্টারগুলি হ'ল মান দ্বারা পাস। অন্যথায় ফাংশন প্রার্থনার পরে ptr
হবে NULL
।