আমার শেখার সময়কালে আমি এটি খুঁজে পেয়েছি:
#include<iostream>
using namespace std;
int dis(char a[1])
{
int length = strlen(a);
char c = a[2];
return length;
}
int main()
{
char b[4] = "abc";
int c = dis(b);
cout << c;
return 0;
}
ভেরিয়েবলের মধ্যে int dis(char a[1])
, [1]
মনে হয় কিছুই করার মতো নয় এবং কিছুতেই কাজ করে না
, কারণ আমি ব্যবহার করতে পারি a[2]
। ঠিক যেমন int a[]
বা char *a
। আমি জানি অ্যারের নামটি একটি পয়েন্টার এবং কীভাবে অ্যারেটি পৌঁছে দিতে হয়, তাই আমার ধাঁধাটি এই অংশটি সম্পর্কে নয়।
আমি যা জানতে চাই তা সংকলকরা কেন এই আচরণের অনুমতি দেয় ( int a[1]
)। বা এর অন্য অর্থ আছে যা আমি জানিনা?
typedef
অ্যারে টাইপের সাথে যুক্ত হলে প্রযোজ্যও । সুতরাং আর্গুমেন্ট ধরণের "পয়েন্টার টু পয়েন্টার" কেবল সিনট্যাকটিক চিনির সাথে প্রতিস্থাপন []
করা নয় *
, এটি আসলে টাইপ সিস্টেমের মধ্য দিয়ে চলছে। va_list
অ্যারে বা অ-অ্যারে টাইপের সাথে সংজ্ঞায়িত করা যেতে পারে এমন কিছু স্ট্যান্ডার্ড ধরণের জন্য এটির বাস্তব-বিশ্ব পরিণতি রয়েছে ।
int dis(char (*a)[1])
। তারপর, আপনি একটি অ্যারের একটি পয়েন্টার পাস: dis(&b)
। আপনি যদি সি বৈশিষ্ট্যগুলি ব্যবহার করতে ইচ্ছুক হন যা সি ++ তে বিদ্যমান নেই, আপনি এ জাতীয় জিনিসগুলি বলতে পারেন void foo(int data[static 256])
এবং int bar(double matrix[*][*])
এটি সম্পূর্ণ কৃমিতে পারে।