ここで私はこのプログラムで何が実際に起こっているのか知りたいです。ここでポインタはchar
タイプであり、var1
は整数タイプです。char型のint型データのアドレスを格納するポインタ
#include<stdio.h>
void main()
{
char *ptr;
int var1;
ptr=&var1;
*ptr=495;
printf("\n%d %c",var1,var1);
*ptr='495';
printf("\n%d %c",var1,var1);
}
私はこのプログラムを実行しようとしたとき、これらは私が理解していない
v.c:6:4: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
ptr=&var1;
^
v.c:7:6: warning: overflow in implicit constant conversion [-Woverflow]
*ptr=495;
^
v.c:9:6: warning: multi-character character constant [-Wmultichar]
*ptr='495';
^
v.c:9:6: warning: overflow in implicit constant conversion [-Woverflow]
そして
ここ239 �
53 5
は - このプログラムの出力をgot-警告ですそれはなぜデータがオーバーフローしているのかということです。
ポインタとしてプログ
の私の分析では、文字型であり、char
のサイズとして1バイトなので、ポインタのみvar1
のベースアドレスを指します。したがって、var1
の最初のバイトに格納された値が出力になります。他の3バイトはポインタによってアクセスされない。
239がvar1
の最初のバイトに格納されていると思います。%c
はASCII値が495でない文字を意味するため、 が印刷されています。
そして、printf
495は文字定数です。しかし、53と5が印刷されます。
わかりません。助けてください。ありがとうございました!
'var1'は' int'です。そのアドレスは 'char *'ではなく 'int *'型です。互換性のあるアドレスが必要な場合は、 'char'と宣言する必要があります。そして、 '' 495 ''は文字定数としては意味がありません。少なくとも' char'に代入するのではないです。 –
* ptr = '495';定義されていない動作です...コンパイラに依存しているので、コンパイラは '495'から '5'しか取らず、* ptrに代入しているようです。 – Varun
実際には、int型データのアドレスをcharポインタに格納するとどうなるかを実験しようとしています。 – SGG