मैंने अभी C का अध्ययन करना शुरू किया, और जब एक फ़ंक्शन के पैरामीटर के रूप में पॉइंटर को पॉइंटर पास करने के बारे में एक उदाहरण किया, तो मुझे एक समस्या मिली।
यह मेरा नमूना कोड है:
#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+=1
करता हूं *ptr++
। अपेक्षित परिणाम पूरे सरणी और संख्या 1 होना चाहिए, लेकिन जब मैं *ptr++
परिणाम का उपयोग करता हूं तो 0 होता है।
क्या कोई अंतर है +=1
और ++
? मुझे लगा कि दोनों एक ही हैं।
allocateIntArray
एक बुरा नाम है क्योंकि ऐसा लगता है malloc
कि आप फ़ंक्शन से सरणी हैं, लेकिन आप नहीं करते हैं। मैं fillIntArray
इसके बजाय सुझाव देता हूं । 2) आप के वापसी मूल्य का उपयोग नहीं करते allocateIntArray
। मेरा सुझाव है कि आप वापसी प्रकार को बदल दें void
। 3) if (ptr != NULL)
समारोह में नहीं होना increasePointer
चाहिए if (*ptr != NULL)
? 4) इसमें डाली गई malloc
अप्राकृतिक है। ऊपर सौरव की टिप्पणी देखें। 5) इस: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
और printf("%d\n", *p1); p1--;
में संलग्न किया जाना चाहिए if(p1 != NULL)
। 6) string.h
अप्रयुक्त है।
p+=1
पसंद है ++p
, पसंद नहीं हैp++
string
।