এখন পর্যন্ত অকার্যকর পয়েন্টারটিতে আমার নিম্নরূপ দেওয়া হচ্ছে follows
যখন কোনও পয়েন্টার ভেরিয়েবল কীওয়ার্ড অকার্যকরভাবে ঘোষণা করা হয় - এটি একটি সাধারণ উদ্দেশ্য পয়েন্টার ভেরিয়েবল হয়ে যায়। যে কোনও ডেটা টাইপের যেকোন ভেরিয়েবলের ঠিকানা (চর, ইনট, ফ্লোট ইত্যাদি) একটি অকার্যকর পয়েন্টার ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে।
main()
{
int *p;
void *vp;
vp=p;
}
যেহেতু অন্যান্য ডেটা টাইপ পয়েন্টারকে অকার্যকর পয়েন্টার নির্ধারিত করা যেতে পারে, তাই আমি এটিকে absolut_value (নীচে দেখানো কোড) ফাংশনে ব্যবহার করেছি। একটি সাধারণ কাজ করতে।
আমি একটি সাধারণ সি কোড লেখার চেষ্টা করেছি যা আর্গুমেন্ট হিসাবে পূর্ণসংখ্যা বা ভাসমান এবং নেতিবাচক হলে এটি + ve করার চেষ্টা করে। আমি নিম্নলিখিত কোডটি লিখেছি,
#include<stdio.h>
void absolute_value ( void *j) // works if used float, obviously it must work but thats not my interest here.
{
if ( *j < 0 )
*j = *j * (-1);
}
int main()
{
int i = 40;
float f = -40;
printf("print intiger i = %d \n",i);
printf("print float f = %f \n",f);
absolute_value(&i);
absolute_value(&f);
printf("print intiger i = %d \n",i);
printf("print float f = %f \n",f);
return 0;
}
তবে আমি ত্রুটি পাচ্ছিলাম, সুতরাং আমি শূন্য পয়েন্টার সহ আমার বোঝাপড়াটি সঠিক নয় :( তাই এখন আমি কেন এটি পয়েন্ট সংগ্রহ করার দিকে এগিয়ে যাব।
শূন্য পয়েন্টারগুলিতে আমার যে জিনিসগুলি আরও বেশি বুঝতে হবে তা হ'ল।
আমাদের এটি বাতিল করার জন্য শূন্য পয়েন্টার ভেরিয়েবলটি টাইপকাস্ট করতে হবে। এটি কারণ একটি শূন্য পয়েন্টার এর সাথে কোনও ডেটা টাইপ নেই। সংকলকটি জানতে পারে এমন কোনও উপায় নেই (বা অনুমান?) কোন ধরণের ডেটা শূন্য পয়েন্টার দ্বারা নির্দেশিত। সুতরাং একটি শূন্য পয়েন্টার দ্বারা নির্দেশিত তথ্য নিতে আমরা এটি শূন্য পয়েন্টার অবস্থানের ভিতরে রাখা তথ্য সঠিক ধরণের সঙ্গে টাইপকাস্ট।
void main()
{
int a=10;
float b=35.75;
void *ptr; // Declaring a void pointer
ptr=&a; // Assigning address of integer to void pointer.
printf("The value of integer variable is= %d",*( (int*) ptr) );// (int*)ptr - is used for type casting. Where as *((int*)ptr) dereferences the typecasted void pointer variable.
ptr=&b; // Assigning address of float to void pointer.
printf("The value of float variable is= %f",*( (float*) ptr) );
}
যদি প্রোগ্রামার শেষ ব্যবহারকারীর দ্বারা ইনপুট করা ডেটা জাতীয় ডেটা সম্পর্কে নিশ্চিত না হয় তবে একটি শূন্য পয়েন্টারটি সত্যই কার্যকর হতে পারে। এই জাতীয় ক্ষেত্রে প্রোগ্রামার অজানা তথ্য টাইপের অবস্থানের দিকে নির্দেশ করতে একটি শূন্য পয়েন্টার ব্যবহার করতে পারে। প্রোগ্রামটি এমনভাবে সেট করা যেতে পারে যে ব্যবহারকারীকে ডেটা এবং টাইপ কাস্টিং ব্যবহারের ধরণটি ব্যবহারকারীকে ইনপুট করা তথ্য অনুযায়ী সম্পাদন করা যেতে পারে inform নীচে একটি কোড স্নিপেট দেওয়া হয়েছে।
void funct(void *a, int z)
{
if(z==1)
printf("%d",*(int*)a); // If user inputs 1, then he means the data is an integer and type casting is done accordingly.
else if(z==2)
printf("%c",*(char*)a); // Typecasting for character pointer.
else if(z==3)
printf("%f",*(float*)a); // Typecasting for float pointer
}
শূন্য পয়েন্টার সম্পর্কে আপনার আরেকটি গুরুত্বপূর্ণ বিষয় মনে রাখা উচিত তা হ'ল - পয়েন্টার গাণিতিকটি শূন্য পয়েন্টারটিতে সম্পাদন করা যায় না।
void *ptr;
int a;
ptr=&a;
ptr++; // This statement is invalid and will result in an error because 'ptr' is a void pointer variable.
তাই এখন আমি বুঝতে পারি আমার ভুলটি কী ছিল। আমি একই সংশোধন করছি।
তথ্যসূত্র:
http://www.antoarts.com/void-pointers-in-c/
http://www.circuitstoday.com/void-pointers-in-c ।
নতুন কোডটি নীচে দেখানো হয়েছে।
#include<stdio.h>
#define INT 1
#define FLOAT 2
void absolute_value ( void *j, int *n)
{
if ( *n == INT) {
if ( *((int*)j) < 0 )
*((int*)j) = *((int*)j) * (-1);
}
if ( *n == FLOAT ) {
if ( *((float*)j) < 0 )
*((float*)j) = *((float*)j) * (-1);
}
}
int main()
{
int i = 0,n=0;
float f = 0;
printf("Press 1 to enter integer or 2 got float then enter the value to get absolute value\n");
scanf("%d",&n);
printf("\n");
if( n == 1) {
scanf("%d",&i);
printf("value entered before absolute function exec = %d \n",i);
absolute_value(&i,&n);
printf("value entered after absolute function exec = %d \n",i);
}
if( n == 2) {
scanf("%f",&f);
printf("value entered before absolute function exec = %f \n",f);
absolute_value(&f,&n);
printf("value entered after absolute function exec = %f \n",f);
}
else
printf("unknown entry try again\n");
return 0;
}
ধন্যবাদ,