में * पीआरटी + = 1 और * पीआरटी ++ के बीच अंतर मैंने सी का अध्ययन करना शुरू किया, और पॉइंटर को फ़ंक्शन के पैरामीटर के रूप में पॉइंटर पास करने के बारे में एक उदाहरण करते समय, मुझे एक समस्या मिली।सी
यह मेरा नमूना कोड है:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
समस्या, लाइन 16 में तब होता है जब मैं *ptr++
करने के लिए *ptr+=1
संशोधित करते हैं। अपेक्षित परिणाम पूरे सरणी और संख्या 1 होना चाहिए, लेकिन जब मैं *ptr++
का उपयोग करता हूं तो परिणाम 0.
+=1
और ++
के बीच कोई भिन्नता है? मैंने सोचा कि दोनों ही वही हैं।
ध्यान दें कि दिया गया कोड संकलित नहीं होगा क्योंकि आपने 'स्ट्रिंग' घोषित नहीं किया है। –
अन्य नोट्स: 1) 'allocateIntArray' एक बुरा नाम है क्योंकि ऐसा लगता है कि आप फ़ंक्शन से सरणी 'malloc' करते हैं, लेकिन आप नहीं करते हैं। मैं इसके बजाय 'fillIntArray' का सुझाव देता हूं। 2) आप 'allocateIntArray' के वापसी मूल्य का उपयोग नहीं करते हैं। मेरा सुझाव है कि आप रिटर्न टाइप को 'शून्य' में बदल दें। 3) 'if (ptr! = NULL)' फ़ंक्शन में नहीं होना चाहिए 'वृद्धि सूचक' 'if (* ptr! = NULL)'? 4) 'मॉलोक' में कास्ट असफल है। ऊपर सौरव की टिप्पणी देखें। 5) यह: 'के लिए (int i = 0; i <10; i ++) {printf ("% d \ n ", p1 [i]); } 'और' printf ("% d \ n", * p1); पी 1 -; 'अगर (पी 1! = एनयूएलएल) 'में संलग्न होना चाहिए। 6) 'string.h' अप्रयुक्त है। –
संबंधित: [++ सी में एक संदर्भित सूचक पर?] (Http://stackoverflow.com/questions/859770/on-a- संदर्भित- सूचक-in-c) –