配列変数とポインタの関係

6160 ワード

先生は配列変数をconstのポインタ変数と見なすことができて、いったい“見なすことができます”で、それとも“です”のポインタですか?
プログラム証拠であなたの観点を説明します.
(ヒント:constポインタのすべての操作が配列変数に対して行うことができ、結果が一致している場合は、配列変数がポインタであることを示します.操作ができない場合、または結果が一致していない場合は、ポインタではないことを示します)
    #include 
    int main(){
        int a[] = {1,1,2,3,4,5,6,7,8,9,0,};
        int *const p = &a[0];

        printf("sizeof(a) = %d , sizeof(p) = %d 
"
,sizeof(a) , sizeof(p)); //sizeof(a) 44, ,sizeof(p) 8printf("main:p = %p
"
,p); printf("main:a = %p
"
,a); // a[13] = 10; printf("main:a[13] = %d
"
,a[13]); p[13] = 10; printf("main:p[13] = %d
"
,p[13]); // sum(a , 11); } int sum(int a[],int len){ int sum = 0; int i = 0; int *const p = &a[0]; // int *const a = &a[0]; //[Error] 'a' redeclared as different kind of symbol (a ) // int *const p = &a[0]; //[Error] redefinition of 'p' (p ) // , // int * a = &a[0]; 26 //[Error] 'a' redeclared as different kind of symbol // int *const p = &a[0]; //[Error] redefinition of 'p' // printf("p = %p
"
,p); printf("a = %p
"
,a); // p[1] = 10; printf("p[1] = %d
"
,p[1]); a[1] = 10; printf("a[1] = %d
"
,a[1]); // , , , a[13] = 10; printf("a[13] = %d
"
,a[13]); p[13] = 10; printf("p[13] = %d
"
,p[13]); // a , , p , , for(i = 0;i < len;i++){ sum += a[i]; } printf("sizeof(a) = %d
"
,sizeof(a) ); // sizeof(a) 8, , return sum; } // , , , , , // , , , sizeof , , , 。