c++ - जब किसी फ़ंक्शन में विशिष्ट-आकार सरणी पैरामीटर होता है, तो इसे पॉइंटर के साथ क्यों बदला जाता है?




arrays standards (2)

सी / सी ++ शब्दावली में शानदार शब्द है जिसका उपयोग स्थिर सरणी और फ़ंक्शन पॉइंटर्स - क्षय के लिए किया जाता है । निम्नलिखित कोड पर विचार करें:

int intArray[] = {1, 3, 5, 7, 11}; // static array of 5 ints
//...
void f(int a[]) {
  // ...
}
// ...
f(intArray); // only pointer to the first array element is passed
int length = sizeof intArray/sizeof(int); // calculate intArray elements quantity (equals 5)
int ptrToIntSize = sizeof(*intArray); // calculate int * size on your system

निम्नलिखित कार्यक्रम को देखते हुए,

#include <iostream>

using namespace std;

void foo( char a[100] )
{
    cout << "foo() " << sizeof( a ) << endl;
}

int main()
{
    char bar[100] = { 0 };
    cout << "main() " << sizeof( bar ) << endl;
    foo( bar );
    return 0;
}

आउटपुट

main() 100
foo() 4
  1. सरणी पहले तत्व के लिए सूचक के रूप में क्यों पारित किया जाता है?
  2. क्या यह सी से विरासत है?
  3. मानक क्या कहता है?
  4. सी ++ की सख्त प्रकार-सुरक्षा क्यों गिरा दी गई है?

हाँ। सी और सी ++ में आप कार्यों के लिए सरणी पास नहीं कर सकते हैं। यह वैसा ही है जैसा होना चाहिए।

आप वैसे भी सादे सरणी क्यों कर रहे हैं? क्या आपने boost / std::tr1::array / std::array या std::vector ?

ध्यान दें कि, हालांकि, आप फ़ंक्शन टेम्पलेट में मनमानी लंबाई की सरणी के संदर्भ को पास कर सकते हैं। मेरे सर के ऊपर से चला गया:

template< std::size_t N >
void f(char (&arr)[N])
{
  std::cout << sizeof(arr) << '\n';
}






function-parameter