配列変数とポインタの関係
6160 ワード
先生は配列変数をconstのポインタ変数と見なすことができて、いったい“見なすことができます”で、それとも“です”のポインタですか?
プログラム証拠であなたの観点を説明します.
(ヒント: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) 8;
printf("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 , , , 。