আমি সবেমাত্র সি পড়া শুরু করেছি এবং যখন ফাংশনটির প্যারামিটার হিসাবে পয়েন্টারটিতে পয়েন্টার পাস করার বিষয়ে একটি উদাহরণ করছিলাম তখন আমি একটি সমস্যা পেয়েছি।
এটি আমার নমুনা কোড:
#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) cast 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
।