私は最近、ポインターを使用して c の定数の値を変更することは可能ですが、文字列リテラルでは不可能であることを知りました。おそらく説明は、定数やその他の文字列がスペース内の変更可能な領域にスペースが割り当てられているのに対し、文字列リテラルはスペース内の変更不可能な領域(おそらくコードセグメント)にあるという事実にあります。これらの変数のアドレスを表示するプログラムを作成しました。出力も表示されます。
#include <stdio.h>
int x=0;
int y=0;
int main(int argc, char *argv[])
{
const int a =5;
const int b;
const int c =10;
const char *string = "simar"; //its a literal, gets space in code segment
char *string2 = "hello";
char string3[] = "bye"; // its array, so gets space in data segment
const char string4[] = "guess";
const int *pt;
int *pt2;
printf("\nx:%u\ny:%u Note that values are increasing\na:%u\nb:%u\nc:%u Note that values are dec, so they are on stack\nstring:%u\nstring2:%u Note that address range is different so they are in code segment\nstring3:%u Note it seems on stack as well\nstring4:%u\n",&x,&y,&a,&b,&c,string,string2,string3,string4);
}
これらの変数がスペースを取得する場所を正確に説明してください?? グローバルはどこでスペースを取得し、定数はどこで取得し、文字列リテラルはどこで取得しますか??