চর * কনস্ট এবং কনস্ট চর * এর মধ্যে পার্থক্য কী?


279

এর মধ্যে পার্থক্য কী:

char * const 

এবং

const char *


8
"কনস্ট" এর বামে প্রথম জিনিসটি ধ্রুবকটি। যদি "কনস্ট্যান্ট" জিনিসটি বামদিকে সবচেয়ে দূরে থাকে তবে তার ডানদিকে প্রথম জিনিসটি ধ্রুবকটি।
কাপকেক

4
একটি বন্ধুত্বপূর্ণ টিপ হিসাবে, কখনও কখনও ভুলবেন না যে cdecl একটি জিনিস।
ব্র্যাডেন সেরা

আর একটি চর কনস্ট * রয়েছে যা প্রত্যাবর্তনের প্রকার: :: কী ()
ঝাং

উত্তর:


363

পার্থক্যটি হ'ল এটি const char *একটিটির পয়েন্টার const char, অন্যদিকে char * constধ্রুবক পয়েন্টারchar

প্রথমটি, নির্দেশিত মানটি পরিবর্তন করা যায় না তবে পয়েন্টারটি হতে পারে। দ্বিতীয়টি, নির্দেশিত মানটি বদলে যেতে পারে তবে পয়েন্টারটি (কোনও রেফারেন্সের মতো) হতে পারে না।

এখানে আরো একটা

const char * const

যা একটি ধ্রুবক চরের স্থির নির্দেশক (সুতরাং এটি সম্পর্কে কিছুই পরিবর্তন করা যায় না)।

বিঃদ্রঃ:

নিম্নলিখিত দুটি রূপ সমতুল্য:

const char *

এবং

char const *

এর সঠিক কারণটি সি ++ স্ট্যান্ডার্ডে বর্ণিত হয়েছে তবে বিভ্রান্তিটি এড়ানো এবং এড়ানো গুরুত্বপূর্ণ। আমি বেশ কয়েকটি কোডিং মান জানি যা পছন্দ করে:

char const

উপর

const char

(সহ বা পয়েন্টার ছাড়া) যাতে বসানো constউপাদান একটি পয়েন্টার সঙ্গে হিসাবে একই const


6
একই ঘোষণায় একাধিক ভেরিয়েবল সুনির্দিষ্ট করা থাকলে কী ঘটে তা লক্ষণীয় কি উপযুক্ত হবে? আমি বিশ্বাস করি const int *foo,*bar;উভয় ঘোষণা করা হবে fooএবং barহতে int const *কিন্তু int const *foo, *barঘোষণা করা হবে fooএকটি হতে int const *এবং barহতে int *। আমি মনে করি typedef int * intptr; const intptr foo,bar;উভয় ভেরিয়েবলকে ঘোষিত করবে int * const; টাইপেফ ছাড়াই এই ধরণের দুটি ভেরিয়েবল তৈরি করতে সম্মিলিত ঘোষণাপত্র ব্যবহার করার কোনও উপায় আমি জানি না।
সুপারক্যাট

1
@ সুপের্যাট I believe const int *foo,*bar; would declare both foo and bar to be int const *: হ্যাঁ but int const *foo, *bar would declare foo to be a int const * and bar to be int *: না! এটি আগের মামলার মতোই হবে। (আদর্শ ফোনে / আরএসএ বি 7 এন দেখুন যেখানে আপনি ফু এবং বার উভয়ের জন্য একই ত্রুটি পান)। I think typedef int * intptr; const intptr foo,bar; would declare both variables to be int * const: হ্যাঁ. I don't know any way to use a combined declaration to create two variables of that type without a typedef: আচ্ছা int *const foo, *const bar;,। সি
ডিক্লেটার

@ জিএক্স_: সুতরাং আমি ভুল ছিলাম - আমার অনিশ্চয়তার কারণেই আমি প্রস্তাব দিয়েছিলাম যে বিধিগুলি কী তা বলতে এটি সহায়ক হতে পারে। কি হবে int const *foo, *volatile barনা bar? এটি উভয় constএবং volatile? I Miss প্যাসকেলের ঘোষিত-পরিবর্তনশীল নামের পরিষ্কার বিচ্ছেদ এবং তাদের প্রকার (পূর্ণসংখ্যার পয়েন্টার একটি অ্যারের একটি পয়েন্টার হবে var foo: ^Array[3..4] of ^Integer।। `যে সি কিছু মজার নেস্টেড আলাদা জিনিস হতে চাই, আমি মনে করি
supercat

3
@ সুপের্যাট (ওহ, কেবলমাত্র, সি ++ কোড লিঙ্কের জন্য দুঃখিত, আমি এখানে একটি সি ++ প্রশ্ন থেকে পেয়েছি) এগুলি সমস্তই সি ডিক্লেয়ারেশন সিনট্যাক্স সম্পর্কে , এর সাথে একটি "" খাঁটি " টাইপ অংশ থাকে যার পরে ঘোষক থাকে । " int const *foo, *volatile bar" তে টাইপ অংশটি int const(এর আগে থামবে *) এবং ঘোষকরা হ'ল ( *fooএক্সপ্রেশনটি *fooইঙ্গিত করবে int const) এবং *volatile bar; পড়া ডান-থেকে-বাম (জন্য নিয়ম CV-কোয়ালিফায়ার ), fooএকটি একটি পয়েন্টার const int- এ এবং barএকটি হয় উদ্বায়ী একটি পয়েন্টার const int- এ (পয়েন্টার নিজেই উদ্বায়ী হয়, সরু int- এ const [যেমন অ্যাক্সেস] হয় না)।
gx_

@supercat এবং "পূর্ণসংখ্যার পয়েন্টার একটি অ্যারের একটি পয়েন্টার" জন্য যেমন (আমি পাসকাল জানি না, না নিশ্চিত সম্পর্কে [3..4]সিনট্যাক্স, তাই 10 উপাদানের একটি অ্যারের নিয়ে যাক): int *(*foo)[10];। এটা তার (ভবিষ্যত) একটি অভিব্যক্তি হিসাবে ব্যবহারের প্রতিফলিত: *(*foo)[i](সঙ্গে iসীমার মধ্যে একটি পূর্ণসংখ্যা [0, 10)অর্থাত [0, 9]প্রথম ডি-রেফারেন্স হবে) fooঅ্যারে এ পেতে, তারপর সূচিতে উপাদান অ্যাক্সেস i(কারণ পোস্টসাফিক্স []বেঁধে উপসর্গ চেয়ে কঠিন *), তারপর এই উপাদান ডি-রেফারেন্স, অবশেষে ফলনশীল একটি int(দেখুন ideone.com/jgjIjR )। তবে typedefএটিকে আরও সহজ করে তোলে (আদর্শ আইডোন.ও.ও.ডাব্লু 7 ডি দেখুন )।
gx_

102

বিভ্রান্তি এড়াতে, সর্বদা কনস্টের যোগ্যতা যুক্ত করুন app

int       *      mutable_pointer_to_mutable_int;
int const *      mutable_pointer_to_constant_int;
int       *const constant_pointer_to_mutable_int;
int const *const constant_pointer_to_constant_int;

10
কেন? "বিভ্রান্তি এড়ানোর জন্য" আমার মধ্যে বিভ্রান্তি কী তা ব্যাখ্যা করে না।
অ্যান্ড্রু ওয়েয়ার

14
@ অ্যান্ড্রু: আমি ধারাবাহিকতা এবং এভাবে পাঠযোগ্যতার ইঙ্গিত দিচ্ছিলাম। সব ধরণের কোয়ালিফায়ার লেখা যাতে তারা বামে যা আছে তা সর্বদা পরিবর্তন করে যা আমি ব্যবহার করি।
ডায়াপির

1
প্রকৃতপক্ষে এটি এসও
ট্র্যাপ

8
একটি কোড স্ট্যান্ডার্ড হিসাবে, আমি খুব কমই এই স্টাইলটির মুখোমুখি হয়েছি এবং তাই এটি গ্রহণ করার সম্ভাবনা নেই। তবে শেখার সরঞ্জাম হিসাবে, এই উত্তরটি খুব সহায়ক ছিল! (সুতরাং আমি খুব খারাপ অনুমান করি যে এটি সাধারণ শৈলী নয়))
নাটভ

8
@Alla: pটাইপ সঙ্গে সম্পর্কযুক্ত নয়: (const int *const)। ভাল বা খারাপের জন্য (আপনি আমাকে জিজ্ঞাসা করলে আরও খারাপ) সি এবং সি ++ উভয়ই কনস্ট কোয়ালিফায়ারকে বোঝানো হয়েছে পোস্টফিক্স: সিএফ কনস্ট সদস্য ফাংশন void foo(int a) const;। ঘোষণা করার সম্ভাবনা const intহ'ল নিয়মের চেয়ে ব্যতিক্রম।
ডায়াপির

44

const সর্বদা এটির (আগে বাম দিকে) আগত জিনিসটি পরিবর্তিত করে, ব্যতীত যখন এটি কোনও প্রকারের ঘোষণায় প্রথম জিনিস হয়, যেখানে এটি তার পরে (জিনিসটির ডানদিকে) আগত জিনিসটিকে সংশোধন করে।

সুতরাং এই দুটি একই:

int const *i1;
const int *i2;

তারা একটি নির্দেশক সংজ্ঞায়িত const int। আপনি কোথায় i1এবং i2পয়েন্টগুলি পরিবর্তন করতে পারেন তবে তারা যে মানটিকে নির্দেশ করেছেন তা আপনি পরিবর্তন করতে পারবেন না।

এই:

int *const i3 = (int*) 0x12345678;

constএকটি পূর্ণসংখ্যার সাথে একটি পয়েন্টার সংজ্ঞা দেয় এবং 12345678 মেমরি অবস্থানের দিকে নির্দেশ করতে এটি সূচনা করে 12 আপনি 12345678 intঠিকানায় মানটি পরিবর্তন করতে পারেন, তবে আপনি যে ঠিকানাটি নির্দেশ করেছেন সেটি পরিবর্তন করতে পারবেন না i3


22

const * charঅবৈধ সি কোড এবং অর্থহীন। সম্ভবত আপনি বোঝাতে চেয়েছিলেন একটি const char *এবং একটি মধ্যে পার্থক্য জিজ্ঞাসা char const *, বা সম্ভবত একটি const char *এবং একটি মধ্যে পার্থক্য char * const?

আরো দেখুন:


18

const char*একটি ধ্রুবক চরিত্রের
char* constপয়েন্টার
const char* constহ'ল একটি চরিত্রের একটি ধ্রুবক পয়েন্টার একটি ধ্রুবক চরিত্রের একটি ধ্রুবক পয়েন্টার


9

থাম্বের বিধি: ডান থেকে বামে সংজ্ঞাটি পড়ুন!


const int *foo;

"" foo( *) intপরিবর্তন করতে পারে না এমন দিকে নির্দেশ করে const")"
প্রোগ্রামারের কাছে এর অর্থ "আমি কীসের প্রতি বিন্দুতে মান পরিবর্তন করব না foo"।

  • *foo = 123;বা foo[0] = 123;অবৈধ হবে।
  • foo = &bar; অনুমতি দেওয়া হয়.

int *const foo;

অর্থ " foo( const) এবং বিন্দু ( *) এ পরিবর্তন করতে পারে না int"।
প্রোগ্রামারের কাছে এর অর্থ "আমি যে মেমরি ঠিকানাfoo উল্লেখ করে তা পরিবর্তন করব না "।

  • *foo = 123;বা foo[0] = 123;অনুমোদিত।
  • foo = &bar; অবৈধ হবে।

const int *const foo;

মানে " foo( const) পরিবর্তন করতে পারে না ( ) এবং ( *) intপরিবর্তন করতে পারে না ( const)"।
প্রোগ্রামারের কাছে এর অর্থ "আমি কীসের মান পরিবর্তন করব নাfoo নির্দেশ করে , বা আমি যে ঠিকানাটিfoo উল্লেখ করেছি তা পরিবর্তন করব না "।

  • *foo = 123;বা foo[0] = 123;অবৈধ হবে।
  • foo = &bar; অবৈধ হবে।

8
  1. কনস্ট চর * x এখানে এক্স মূলত একটি অক্ষর পয়েন্টার যা একটি ধ্রুবক মানের দিকে নির্দেশ করে

  2. চর * কনট এক্সটি অক্ষর নির্দেশককে উল্লেখ করা হয় যা ধ্রুবক, তবে এটি যে অবস্থানটি নির্দেশ করছে সেটি পরিবর্তন হতে পারে।

  3. কনস্ট চর * কনস্ট এক্স হল 1 এবং 2 এর সংমিশ্রণ, এর অর্থ এটি একটি ধ্রুবক অক্ষর পয়েন্টার যা ধ্রুবক মানের দিকে নির্দেশ করছে।

  4. কনস্ট * চর x একটি সংকলক ত্রুটির কারণ হবে। এটা ঘোষণা করা যাবে না।

  5. চর কনস্ট * x পয়েন্ট 1 এর সমান।

থাম্বের নিয়মটি হ'ল যদি কনটটি ভের নামের সাথে থাকে তবে পয়েন্টারটি ধ্রুবক হবে তবে পয়েন্টার অবস্থানটি পরিবর্তন করা যেতে পারে , অন্যথায় পয়েন্টারটি একটি স্থির অবস্থানের দিকে নির্দেশ করবে এবং পয়েন্টার অন্য কোনও স্থানে নির্দেশ করতে পারে তবে পয়েন্টিং অবস্থানের সামগ্রীটি পরিবর্তন হতে পারে না


1
"চর * কনট এক্সটি হ'ল অক্ষর নির্দেশককে নির্দেশ করা হয় যা ধ্রুবক, তবে এটি যে অবস্থানটি নির্দেশ করছে সেটি পরিবর্তন হতে পারে।" ভুল। অবস্থানের মানটি স্থানটি পরিবর্তিত হতে পারে।
PleaseHelp

3

প্রথমটি একটি সিনট্যাক্স ত্রুটি। হতে পারে আপনি পার্থক্য বোঝাতে চেয়েছিলেন

const char * mychar

এবং

char * const mychar

সেক্ষেত্রে প্রথমটি হ'ল ডেটারে পয়েন্টার যা পরিবর্তন করতে পারে না এবং দ্বিতীয়টি হ'ল একটি পয়েন্টার যা সর্বদা একই ঠিকানার দিকে নির্দেশ করবে।


3

আর একটি আঙ্গুলের নিয়মটি হ'ল কনস্ট কোথায় রয়েছে তা পরীক্ষা করা :

  1. * => সঞ্চিত মান পূর্বে স্থির থাকে
  2. * => পয়েন্টার পরে নিজেই ধ্রুবক

3

পরিবর্তনীয় ঘোষণার এই বিশেষ উদাহরণটি বুঝতে প্রচুর উত্তর নির্দিষ্ট কৌশলগুলি, থাম্বগুলির নিয়ম ইত্যাদি সরবরাহ করে। তবে যে কোনও ঘোষণা বোঝার একটি জেনেরিক কৌশল রয়েছে:

ক্লকওয়াইজ / সর্পিল বিধি

ক)

const char *a;

ক্লকওয়াইজ / সর্পিল নিয়ম অনুসারে aচরিত্রের দিকে নির্দেশ করা যা স্থির থাকে। যার অর্থ চরিত্রটি স্থির থাকে তবে পয়েন্টারটি পরিবর্তন করতে পারে। অর্থাত্ a = "other string";ঠিক আছে তবে a[2] = 'c';সংকলন করতে ব্যর্থ হবে

বি)

char * const a;

নিয়ম অনুসারে, aএকটি চরিত্রের প্রতি বিন্দু নির্দেশক। যেমন আপনি করতে পারেন a[2] = 'c';তবে আপনি পারবেন নাa = "other string";


1
ডান-বাম নিয়ম হিসাবেও পরিচিত (কমপক্ষে এটি আমি কীভাবে শিখেছি): jdurrett.ba.ttu.edu/3345/handouts/RL-rule.html
টমাস

(উত্তরটির সারমর্ম যদি কোনও লিঙ্কের আড়ালে লুকানো না থাকে তবে এখানে লেখাটি এমনকি "নিয়ম অনুসারে" জেনেরিকের বাইরেও তার কোনও নির্দিষ্ট উল্লেখ না করে বা কমপক্ষে উল্লেখ করা হয়েছে।)
SZ।

@Sz। আপনার কি এখানে কোনও নির্দিষ্ট বিভ্রান্তি রয়েছে যা আমি পরিষ্কার করতে পারি? নিয়ম জানার পরে এর আসলে খুব বেশি কিছু নেই।
পনটএনপি

1

আমি মনে করি আপনার অর্থ কনস্ট চার্জ এবং চর * কনস্ট।

প্রথম, কনস্টের চর *, একটি ধ্রুবক চরিত্রের পয়েন্টার। পয়েন্টারটি নিজেই পরিবর্তনযোগ্য।

দ্বিতীয়, চর * কনস্ট্ট একটি চরিত্রের একটি ধ্রুবক পয়েন্টার। পয়েন্টারটি পরিবর্তন করতে পারে না, যে চরিত্রটি এটি নির্দেশ করতে পারে।

এবং তারপরে কনস্ট চর * কনস্টেন্ট রয়েছে যেখানে পয়েন্টার এবং চরিত্রটি পরিবর্তন করতে পারে না।


আপনার প্রথম দুটি আসলে একই এবং তৃতীয়টি সংকলক ত্রুটি :)
workmad3

1

এখানে কোড সহ একটি বিশদ ব্যাখ্যা

/*const char * p;
char * const p; 
const char * const p;*/ // these are the three conditions,

// const char *p;const char * const p; pointer value cannot be changed

// char * const p; pointer address cannot be changed

// const char * const p; both cannot be changed.

#include<stdio.h>

/*int main()
{
    const char * p; // value cannot be changed
    char z;
    //*p = 'c'; // this will not work
    p = &z;
    printf(" %c\n",*p);
    return 0;
}*/

/*int main()
{
    char * const p; // address cannot be changed
    char z;
    *p = 'c'; 
    //p = &z;   // this will not work
    printf(" %c\n",*p);
    return 0;
}*/



/*int main()
{
    const char * const p; // both address and value cannot be changed
    char z;
    *p = 'c'; // this will not work
    p = &z; // this will not work
    printf(" %c\n",*p);
    return 0;
}*/

@ ইরি মুর আপনাকে ধন্যবাদ
মেঘরাজ

1
// Some more complex constant variable/pointer declaration.
// Observing cases when we get error and warning would help
// understanding it better.

int main(void)
{
  char ca1[10]= "aaaa"; // char array 1
  char ca2[10]= "bbbb"; // char array 2

  char *pca1= ca1;
  char *pca2= ca2;

  char const *ccs= pca1;
  char * const csc= pca2;
  ccs[1]='m';  // Bad - error: assignment of read-only location ‘*(ccs + 1u)’
  ccs= csc;    // Good

  csc[1]='n';  // Good
  csc= ccs;    // Bad - error: assignment of read-only variable ‘csc’

  char const **ccss= &ccs;     // Good
  char const **ccss1= &csc;    // Bad - warning: initialization from incompatible pointer type

  char * const *cscs= &csc;    // Good
  char * const *cscs1= &ccs;   // Bad - warning: initialization from incompatible pointer type

  char ** const cssc=   &pca1; // Good
  char ** const cssc1=  &ccs;  // Bad - warning: initialization from incompatible pointer type
  char ** const cssc2=  &csc;  // Bad - warning: initialization discards ‘const’
                               //                qualifier from pointer target type

  *ccss[1]= 'x'; // Bad - error: assignment of read-only location ‘**(ccss + 8u)’
  *ccss= ccs;    // Good
  *ccss= csc;    // Good
  ccss= ccss1;   // Good
  ccss= cscs;    // Bad - warning: assignment from incompatible pointer type

  *cscs[1]= 'y'; // Good
  *cscs= ccs;    // Bad - error: assignment of read-only location ‘*cscs’
  *cscs= csc;    // Bad - error: assignment of read-only location ‘*cscs’
  cscs= cscs1;   // Good
  cscs= cssc;    // Good

  *cssc[1]= 'z'; // Good
  *cssc= ccs;    // Bad - warning: assignment discards ‘const’
                 //                qualifier from pointer target type
  *cssc= csc;    // Good
  *cssc= pca2;   // Good
  cssc= ccss;    // Bad - error: assignment of read-only variable ‘cssc’
  cssc= cscs;    // Bad - error: assignment of read-only variable ‘cssc’
  cssc= cssc1;   // Bad - error: assignment of read-only variable ‘cssc’
}

1
  1. ধ্রুবক পয়েন্টার : একটি ধ্রুবক পয়েন্টার পুরো প্রোগ্রামের সময় কেবলমাত্র সম্পর্কিত ডেটা টাইপের একক ভেরিয়েবলকে নির্দেশ করতে পারে we আমরা পয়েন্টার দ্বারা পরিবর্তিত পয়েন্টের মান পরিবর্তন করতে পারি। সূচনা নিজেই ঘোষণার সময় করা উচিত।

বাক্য গঠন:

datatype *const var;

char *const এই ক্ষেত্রে আসে।

/*program to illustrate the behaviour of constant pointer */

#include<stdio.h>
int main(){
  int a=10;
  int *const ptr=&a;
  *ptr=100;/* we can change the value of object but we cannot point it to another variable.suppose another variable int b=20; and ptr=&b; gives you error*/
  printf("%d",*ptr);
  return 0;
}
  1. একটি স্থির মানের দিকে পয়েন্টার : এটিতে একটি পয়েন্টার সংশ্লিষ্ট ধরণের যে কোনও সংখ্যক ভেরিয়েবলকে নির্দেশ করতে পারে তবে আমরা নির্দিষ্ট সময়ে পয়েন্টার দ্বারা নির্দেশিত বস্তুর মান পরিবর্তন করতে পারি না।

বাক্য গঠন:

const datatype *varঅথবা datatype const *var

const char* এই ক্ষেত্রে আসে।

/* program to illustrate the behavior of pointer to a constant*/

   #include<stdio.h>
   int main(){
       int a=10,b=20;
       int const *ptr=&a;
       printf("%d\n",*ptr);
       /*  *ptr=100 is not possible i.e we cannot change the value of the object pointed by the pointer*/
       ptr=&b;
       printf("%d",*ptr);
       /*we can point it to another object*/
       return 0;
    }

1

চর * কনস্ট এবং কনস্টের চর *?

  1. ধ্রুবক মানের দিকে ইশারা করা

const char * p; // মান পরিবর্তন করা যায় না

  1. একটি মানের ধ্রুবক পয়েন্টার

char * const p; // ঠিকানা পরিবর্তন করা যায় না

  1. ধ্রুবক মানের জন্য নিয়মিত পয়েন্টার

const char * const p; // উভয়ই পরিবর্তন করা যায় না।


1

constপরিবর্তক তার বাঁদিকে অবিলম্বে শব্দটি প্রয়োগ করা হয়। এটির একমাত্র ব্যতিক্রম হ'ল যখন তার বামে কিছুই নেই, তখন এটি তার ডানদিকে তত্ক্ষণাত প্রযোজ্য।

এগুলি "একটি ধ্রুবককে ধ্রুবক নির্দেশক" বলার সমস্ত সমতুল্য উপায় char:

  • const char * const
  • const char const *
  • char const * const
  • char const const *

এটি কি সংকলক নির্ভর? "কনস্ট কনস্ট কনস্ট *" এবং "কনস্ট কনস্ট কনস্ট *" এবং "চর কনস্ট কনস্ট কন * *" এর জন্য জিসিসি উত্পাদন একই ফলাফল -> পয়েন্টার অন্য জায়গায় নির্দেশ করতে পারে।
cosinus0

1

দুটি নিয়ম

  1. If const is between char and *, it will affect the left one.
  2. If const is not between char and *, it will affect the nearest one.

যেমন

  1. char const *. This is a pointer points to a constant char.
  2. char * const. This is a constant pointer points to a char.

1

আমি উল্লেখ করতে চাই যে int const *(বা const int *) ব্যবহারটি কোনও const intভেরিয়েবলের দিকে নির্দেশকারী পয়েন্টার সম্পর্কে নয় , তবে এই ভেরিয়েবলটি constএই নির্দিষ্ট পয়েন্টারের জন্য।

উদাহরণ স্বরূপ:

int var = 10;
int const * _p = &var;

উপরের কোডটি পুরোপুরি সূক্ষ্মভাবে সংকলন করে। _pএকটি constপরিবর্তনশীলকে নির্দেশ করে, যদিও এটি varনিজেই ধ্রুবক নয়।


1

আমি সি সম্পর্কে চেক বই থেকে মনে পড়েছি: আপনি ভেরিয়েবলটি দিয়ে শুরু করে বাম দিকে যান এই ঘোষণাটি পড়ুন। অনেক দূরে

char * const a;

আপনি এই হিসাবে পড়তে পারেন: " aধ্রুবক পয়েন্টারটিতে ধরণের পরিবর্তনশীল char",

char const * a;

আপনি এই হিসাবে পড়তে পারেন: "a ধরণের ধরণের ধ্রুবক পরিবর্তনের জন্য পয়েন্টার। আমি আশা করি এটি সাহায্য করবে।

বোনাস:

const char * const a;

aধরণের ধরণের ধ্রুবক পরিবর্তনের স্থির পয়েন্টার হিসাবে আপনি পড়বেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.