यह वास्तव में उत्तर देने के लिए एक साधारण बात है।
आप जो भी कर रहे हैं वह पॉइंटर गणित है, इसके बारे में कुछ भी अमान्य नहीं है। यदि आप परिणामस्वरूप पॉइंटर्स का किसी भी तरीके से उपयोग करने का प्रयास करते हैं तो इस बात पर निर्भर करता है कि आपकी प्रक्रिया में उस पॉइंटर द्वारा इंगित स्मृति तक पहुंच है या नहीं, और यदि ऐसा है तो इस पर अनुमतियां क्या हैं?
foo.cc:
#include <iostream>
using namespace std;
int main() {
int array[10];
int *a = array + 10;
int *b = &array[10];
int *c = &array[3000];
cerr << "Pointers values are: " << a << " " << b << " " << c << endl;
return 0;
}
संकलित करने के लिए:
g++ -Werror -Wall foo.cc -o foo
कोई चेतावनी नहीं उपज चाहिए क्योंकि पूर्णांक * ख = & सरणी [10] वैध
असल में तो है पॉइंटर गणित के बारे में कुछ इंगित करने के लिए मेरे द्वारा जोड़ा गया अगला लाइन है।
न केवल संकलन foo जाएगा, यह बिना किसी अवरोध के चलेंगे:
./foo
Pointers are: 0x7fff1d356e68 0x7fff1d356e68 0x7fff1d359d20
असल सारणी वाक्य-विन्यास foo [IDX] है शॉर्टकट और सूचक गणित के स्वच्छ प्रतिनिधित्व।
यदि सी 99 के बारे में कुछ भ्रम है, तो मानक किसी भी तरह से और अच्छी तरह से परिभाषित इस गणित को प्रभावित नहीं करता है।
C99 में एक ही बात:
#include <stdio.h>
int main() {
int array[10];
int *a = array + 10;
int *b = &array[10];
int *c = &array[3000];
fprintf(stderr, "Pointers are: %p, %p, %p\n" , a , b , c);
return 0;
}
तब:
gcc -std=c99 -Wall -Werror -o foo foo.c
./foo
आउटपुट:
Pointers are: 0x7fff2c7d22c8, 0x7fff2c7d22c8, 0x7fff2c7d5180
दिग्गज का शिकार http://stackoverflow.com/questions/988158/ –
@ जोहान्स - आप सही हैं, बंद करने के लिए मतदान कर रहे हैं - एक-एक-अतीत-अंत-अंत-तत्व-तत्व-के माध्यम से-सबस्क्रिप्ट-कानूनी-द्वारा-0 [email protected] जोहान्स - आप सही हैं, बंद करने के लिए मतदान कर रहे हैं। – Omnifarious