Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C पॉइंटर एडिशन और सब्ट्रैक्शन का उदाहरण

पॉइंटर्स के कई लेकिन आसान कॉन्सेप्ट्स हैं और वे C प्रोग्रामिंग के लिए बहुत महत्वपूर्ण हैं।

दो अंकगणितीय पॉइंटर कॉन्सेप्ट्स नीचे समझाए गए हैं: C पॉइंटर एडिशन और सब्ट्रैक्शन।

C पॉइंटर एडिशन

C पॉइंटर एडिशन का अर्थ है पॉइंटर वेरिएबल में एक मान जोड़ना।

फॉर्मूला

new_address = current_address + (number * size_of(data_type))

उदाहरण

#include <stdio.h> 

int main() {
    int num = 500;
    int *ptr;        // int का पॉइंटर
    ptr = #      // number वेरिएबल का पता स्टोर करता है
    
    printf("Address of ptr is %p\n", (void*)ptr);
    ptr = ptr + 7;   // पॉइंटर वेरिएबल में 7 जोड़ना
    printf("After adding, address of ptr is %p\n", (void*)ptr);
    
    return 0;
}

आउटपुट (उदाहरण)

Address of ptr is 0x7ffee4b8c9ac
After adding, address of ptr is 0x7ffee4b8c9c8

व्याख्या: ptr + 7 का अर्थ है 7 int एलिमेंट्स आगे बढ़ना। चूंकि sizeof(int) = 4 बाइट्स (आमतौर पर), पता 7 * 4 = 28 बाइट्स बढ़ जाता है।

C पॉइंटर सब्ट्रैक्शन

यह पॉइंटर वेरिएबल से एक मान घटाता है। पॉइंटर वेरिएबल से किसी भी संख्या को घटाने पर एक पता मिलता है।

फॉर्मूला

new_address = current_address - (number * size_of(data_type))

उदाहरण

#include <stdio.h> 

int main() {
    int num = 500;
    int *ptr;        // int का पॉइंटर
    ptr = #      // number वेरिएबल का पता स्टोर करता है
    
    printf("Address of ptr is %p\n", (void*)ptr);
    ptr = ptr - 5;   // पॉइंटर वेरिएबल से 5 घटाना
    printf("After subtraction, address of ptr is %p\n", (void*)ptr);
    
    return 0;
}

आउटपुट (उदाहरण)

Address of ptr is 0x7ffee4b8c9ac
After subtraction, address of ptr is 0x7ffee4b8c994

व्याख्या: ptr - 5 का अर्थ है 5 int एलिमेंट्स पीछे जाना। पता 5 * 4 = 20 बाइट्स घट जाता है।

पॉइंटर डिफरेंस (दो पॉइंटर्स घटाना)

एक ही सरणी के दो पॉइंटर्स को घटाने पर उनके बीच के एलिमेंट्स की संख्या मिलती है:

#include <stdio.h> 

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *p1 = &arr[1];  // &arr[1]
    int *p2 = &arr[4];  // &arr[4]
    
    printf("p2 - p1 = %td elements\n", p2 - p1);  // 3 एलिमेंट्स
    printf("Byte difference: %td bytes\n", (char*)p2 - (char*)p1);  // 12 बाइट्स
    
    return 0;
}

मुख्य नियम

  • पॉइंटर अंकगणित स्केल्ड होता है: ptr + n का अर्थ है n * sizeof(*ptr) बाइट्स आगे।
  • केवल एक ही सरणी/ऑब्जेक्ट के पॉइंटर्स पर वैध।
  • सरणी बाउंड्स के बाहर पॉइंटर ले जाना अनिर्दिष्ट व्यवहार है (भले ही डीरेफरेंस न करें)।
  • %p फॉर्मेट स्पेसिफायर और (void*) कास्ट का उपयोग पतों को प्रिंट करने के लिए करें।
  1. C भाषा में स्ट्रिंग क्या है - घोषणा और प्रारंभिकरण C भाषा में स्ट्रिंग क्या है - घोषणा और प्रारंभिकरण

    स्ट्रिंग क्या है? कैरेक्टर्स की एक सरणी (या संग्रह) को स्ट्रिंग कहा जाता है। C में स्ट्रिंग हमेशा नल कैरेक्टर \0 (ASCII 0) से समाप्त होती है। घोषणा (Declaration) char string_name[size]; उदाहरण: char str[50]; // 50 कैरेक्टर तक की स्ट्रिंग (49 + नल टर्मिनेटर) प्रारंभिकरण (Initialization) विधि 1: ए

  1. C में ऐरे ऑफ पॉइंटर्स और पॉइंटर टू पॉइंटर C में ऐरे ऑफ पॉइंटर्स और पॉइंटर टू पॉइंटर

    ऐरे ऑफ पॉइंटर्स किसी भी डेटा टाइप की तरह, हम पॉइंटर्स का ऐरे घोषित कर सकते हैं। घोषणा datatype *pointername[size]; उदाहरण: int *p[5]; // 5 इंटीजर एड्रेस रखने वाला पॉइंटर ऐरे आरंभीकरण int a[3] = {10, 20, 30}; int *p[3]; for (i = 0; i < 3; i++) p[i] = &a[i]; // या p[i] = a + i; एक्सेस करना for

  1. C में volatile और restrict टाइप क्वालिफायर्स उदाहरण के साथ समझें C में volatile और restrict टाइप क्वालिफायर्स उदाहरण के साथ समझें

    टाइप क्वालिफायर्स C प्रोग्रामिंग भाषा में मौजूदा डेटा टाइप्स में विशेष विशेषताएं जोड़ते हैं। C भाषा में तीन टाइप क्वालिफायर्स हैं: const, volatile, और restrict। यहां volatile और restrict समझाए गए हैं। Volatile एक volatile टाइप क्वालिफायर कंपाइलर को बताता है कि एक वेरिएबल शेयर्ड है। यानी, यदि इसे v