यह मैंने अपने सीखने की अवधि के दौरान पाया:
#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[*][*])
, लेकिन यह कीड़े की एक पूरी अन्य सकता है।