我最近了解到可以使用指針更改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);
}
請解釋正是這些變量得到空間? 全局變量在哪裏獲得空間,常量在哪裏得到,字符串文字在哪裏得到?
「size a.out」可用於驗證Steve的答案(僅在某種程度上)。 – Ram 2012-08-15 12:14:04