< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> | int main(void){ int *p; p=NULL; printf("%d\n",*p);//ここで発現します return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> | int main(void){ int *p; printf("%d\n",*p);//ここで発現します。コンパイラによってはここで「未初期化な変数を参照」という警告が出ます。 return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> | int main(void){ int i,n[10]={0,1,2,3,4,5,6,7,8,9}; int *p; p=n; for(i=0;i<=10;i++){ printf("%d\n",p[i]);//ここで i==10 の時発現します。 //しかし多くの場合、謎な値が表示されるのみです。 } return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> | using namespace std; int main(void){ int *p; p=new int;//新しいint型実体を作成します。 delete p;//作成したint型実体を破棄します。 printf("%d\n",*p);//ここで発現します。 return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> | #include <cstdlib> using namespace std; int sortproc(const void *val1,const void *val2){ return *(const int*)val1-*(const int*)val2;//ここで発現します。 //↑ここの型は本来、const int**であるべきですが、 //間違えてconst int*にしてしまっています。 //このケースではまず異常終了はしないでしょうが、 //ポインタ(絶対ID)の大小を比較しているので、意図した結果にはなりません。 } int main(void){ int **data; data=new int*[5];//配列オブジェクトを作成します。 data[0]=new int[6]; data[1]=new int[7]; data[2]=new int[8]; data[3]=new int[9]; data[4]=new int[10]; //各オブジェクトに値を入れておきます。 data[0][0]=5; data[1][0]=3; data[2][0]=1; data[3][0]=2; data[4][0]=4; //↓今入れた値でソートします。 qsort(data,5,sizeof(int*),sortproc); //qsort関数はsortproc関数を繰り返し呼び出してソートを実行します。 //↓で1,2,3,4,5と表示されることを意図しています。 printf("%d,%d,%d,%d,%d\n",data[0][0],data[1][0],data[2][0],data[3][0],data[4][0]); delete[] data[4];//配列オブジェクトを破棄します。 delete[] data[3]; delete[] data[2]; delete[] data[1]; delete[] data[0]; delete[] data; return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> | int main(void){ int a;//int型実体定義 short b;//short型実体定義 int *c;//int型へのポインタ型実体定義 short *d;//short型へのポインタ型実体定義 float *e;//float型へのポインタ型実体定義 a=10; b=a;//暗黙の型キャスト(代入) int から short です。 b=(short)a;//明示的型キャスト int から short です。 a=b+10;//暗黙の型キャスト(演算) short から int です。(10はint型なのでこうなります) a=(int)b+10;//明示的型キャスト short から int です。 c=&a;//cにaのポインタを代入です。 d=&b;//dにbのポインタを代入です。 //安全なのは↑までです。 //d=c;//C++ではこれはエラーです。(int*からshort*への変換は認められない) //e=c;//C++ではこれはエラーです。(int*からfloat*への変換は認められない) d=(short*)c;//強制型キャスト int* から short* です。この操作はコンパイラを強制的に黙らせます。 e=(float*)c;//強制型キャスト int* から float* です。この操作はコンパイラを強制的に黙らせます。 printf("a=%d,b=%d,c=%d,d=%d,e=%f,f=%f\n",a,b,*c,*d,*e,(float)*c); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> | int main(void){ short a[2]={5,10}; int *b; b=(int*)a;//強制型キャストします *b=20;//さらに代入します printf("a[0]=%d,a[1]=%d\n",a[0],a[1]); return 0; } |