मैंने अभी 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।