আমার শেখার সময়কালে আমি এটি খুঁজে পেয়েছি:
#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[*][*])এটি সম্পূর্ণ কৃমিতে পারে।