タイトルにもありますが、宣言子type-qualifiers
の格納場所( など)が影響するのstack
か少し戸惑っています。bss
int main()
{
const int value=5;
const char *str= "Constant String";
}
- 上記のコードでは、デフォルト
storage-class-specifier
はauto
です。 - したがって、これらの定数は、作成時に
stack-frame
ofに割り当てられると想定main
されます。 - 一般に、
pointers
スタック内のさまざまなメモリ位置には、そこに含まれる値を自由に変更できます。 - したがって、上記の点から、格納された要素の性質
type-qualifier
を保持するためにいくつかのロジックを追加するか(そうであれば、それは何ですか?) 、メモリに格納されることは理解できます。これについて詳しく説明してください。constant
constants
read-only-portion
より詳細な例
#include <stdio.h>
int main(void)
{
int val=5;
int *ptr=&val;
const int *cptr=ptr;
*ptr=10; //Allowed
//*cptr=10; Not allowed
//Both ptr and cptr are pointing to same locations. But why the following error?
//"assignment of read-only location ‘*cptr’"
printf("ptr: %08X\n",ptr);
printf("cptr: %08X\n",cptr);
printf("Value: %d\n",*ptr);
}
上記の例では、 と の両方が同じ場所cptr
をptr
指しています。しかし、整数cptr
へのポインタです。const type qualified
の値を変更しているcptr
ときに、コンパイラは「読み取り専用の場所 '*cptr' の割り当て」としてエラーをスローします。しかし、以下の出力のように、同じ場所をで変更できます。説明してくださいptr
ptr: BFF912D8
cptr: BFF912D8
Value: 10