本帖最后由 yufang1993 于 2015-11-12 08:22 编辑
上图int *q=&arr的写法错误,应为int (*q)[3]=&arr; #include <stdio.h>
- int main(){
- int arr[3]={1,2,3};
- int *p=&arr[0];
- // 错误一: int *pp=&arr;错误写法.&arr取出后是数组类型的指针,而int *变量名是用以接收int 型指针的,此时返回一个警告,incompatible pointer types initializing 'int *' with an expression of type 'int (*)[3]' [-Wincompatible-pointer-types]
- // 错误二: int (*p)[3]=&arr;//老师讲解以方便起见,此处仍然写p,但此p和上面的p意义不一样,此处,p代表数组的指针,上面的p代表数组中首元素的指针.此处返回:error: redefinition of 'p' with a different type:为了便于区分,不至混淆,应这样写:
- int (*pp)[3]=&arr;
- printf("数组名或数组首元素的地址:%p\n数组的地址%p\n",p,pp);
- /*
- 返回:数组名或数组首元素的地址:0x7fff5fa0ec0c
- 数组的地址0x7fff5fa0ec0c
- */
- return 0;
- }
上图int *q=&arr的写法错误,应为int (*q)[3]=&arr;
#include <stdio.h>
int main(){
int arr[3]={1,2,3};
int *p=&arr[0];
// int *pp=&arr;错误写法.&arr取出后是数组类型的指针,而int *变量名是用以接收int 型指针的,此时返回一个警告,incompatible pointer types initializing 'int *' with an expression of type 'int (*)[3]' [-Wincompatible-pointer-types]
// int (*p)[3]=&arr;//老师讲解以方便起见,此处仍然写p,但此p和上面的p意义不一样,此处,p代表数组的指针,上面的p代表数组中首元素的指针.此处返回:error: redefinition of 'p' with a different type:为了便于区分,不至混淆,应这样写:
int (*pp)[3]=&arr;
printf("数组名或数组首元素的地址:%p\n数组的地址%p\n",p,pp);
/*
返回:数组名或数组首元素的地址:0x7fff5fa0ec0c
数组的地址0x7fff5fa0ec0c
*/
return 0;
} |