2011-03-12 15 views
35

जब मैं यह कोड चलाता हूं।सी में परिवर्तनीय पते कैसे मुद्रित करें?

#include <stdio.h> 

void moo(int a, int *b); 

int main() 
{ 
    int x; 
    int *y; 

    x = 1; 
    y = &x; 

    printf("Address of x = %d, value of x = %d\n", &x, x); 
    printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y); 
    moo(9, y); 
} 

void moo(int a, int *b) 
{ 
    printf("Address of a = %d, value of a = %d\n", &a, a); 
    printf("Address of b = %d, value of b = %d, value of *b = %d\n", &b, b, *b); 
} 

मुझे यह त्रुटि मेरे कंपाइलर में मिल रही है।

/Volumes/MY USB/C Programming/Practice/addresses.c:16: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’ 
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’ 
/Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’ 
/Volumes/MY USB/C Programming/Practice/addresses.c: In function ‘moo’: 
/Volumes/MY USB/C Programming/Practice/addresses.c:23: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’ 
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int **’ 
/Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’ 

क्या आप मेरी मदद कर सकते हैं?

धन्यवाद

blargman

+2

वे "चेतावनी" कहते हैं, "त्रुटि" नहीं। इसका मतलब है कि आपका प्रोग्राम अभी भी चलाएगा। लेकिन नीचे दिए गए उत्तर के अनुसार चेतावनियों को ठीक करें। –

उत्तर

66

आप %p उपयोग करने के लिए एक सूचक प्रिंट करना चाहते हैं। कल्पना से:

p तर्क void के लिए सूचक होगा। सूचक के मूल्य को कार्यान्वयन-परिभाषित तरीके से प्रिंटिंग वर्णों के अनुक्रम में परिवर्तित किया जाता है।

और कलाकारों को न भूलें, उदा।

printf("%p\n",(void*)&a); 
+0

जो मैंने मूल रूप से सोचा था लेकिन इस वेबसाइट पर ट्यूटोरियल (http://www.cis.temple.edu/~ingargio/cis71/code/addresses.c) मुझे% d का उपयोग करने के लिए कह रहा है ... क्या यह गलत है। – nambvarun

+2

@blargman, हाँ, यह गलत है। आप टाइपकास्टिंग द्वारा काम करने में चीजों को मजबूर करने में सक्षम हो सकते हैं, लेकिन चूंकि '% d' हस्ताक्षर किए गए पूर्णांक प्रिंटिंग के लिए है, तो शायद यह एक अच्छा विकल्प नहीं है। –

+0

ठीक है धन्यवाद। – nambvarun

0

ऐसा लगता है कि% p का उपयोग करें: जब आप किसी भी चर या एक सूचक की स्मृति पता मुद्रित करने के लिए, %d का उपयोग कर काम नहीं करेंगे इरादा Print Pointers

5

और होगा कुछ संकलन त्रुटियों का कारण है, क्योंकि आप किसी पते के बजाय एक संख्या मुद्रित करने का प्रयास कर रहे हैं, और यहां तक ​​कि यदि यह काम करता है, तो आपके पास एक इरादा त्रुटि होगी, क्योंकि स्मृति पता एक संख्या नहीं है। मूल्य 0xbfc0d878 निश्चित रूप से एक संख्या नहीं है, लेकिन एक पता है।

आपको क्या उपयोग करना चाहिए %p है। उदाहरण के लिए,

#include<stdio.h> 

int main(void) { 

    int a; 
    a = 5; 
    printf("The memory address of a is: %p\n", (void*) &a); 
    return 0; 
} 

शुभकामनाएँ!

+2

मूल्य '0xbfc0d878' * एक संख्या है। '(शून्य *) 0xbfc0d878' नहीं है। और '% p' मानव-पठनीय प्रतिनिधित्व का उपयोग करने की संभावना है जो एक संख्या (आमतौर पर हेक्स) जैसा दिखता है लेकिन इसका मतलब यह नहीं है कि पॉइंटर्स संख्याएं हैं। (बीटीडब्ल्यू, प्रश्न 2 साल पहले उत्तर दिया गया था।) –

0

एक साधारण कोड जो परिवर्तनीय पते और उनके मूल्यों को मुद्रित करता है & पॉइंटर्स का उपयोग करके विभिन्न तरीकों से परिवर्तनीय पते या मानों को मुद्रित करने के तरीके के बारे में भी।

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
    int i=3; 
    int*j,**k; 
    clrscr(); 
    j=&i; 
    k=&j; 
    printf("\nAddress of i=%u",j); 
    printf("\nAddress of i=%u",*k); 
    printf("\nAddress of i=%u",i); 
    printf("\nAddress of j=%u",&j); 
    printf("\nAddress of j=%u",&k); 
    printf("\nAddress of j=%u",k); 
    printf("\nAddress of i=%d",i); 
    printf("\nAddress of i=%d",*j); 
    printf("\nAddress of i=%d",**k); 
    printf("\nAddress of j=%u",i); 
    printf("\nAddress of j=%u",*k); 
    printf("\nAddress of k=%u",k); 
    getch(); 
} 

आशा है कि आप समझें।

संबंधित मुद्दे