黑马程序员技术交流社区
标题: 指针与数组中因为变量名容易产生误解的地方, [打印本页]
作者: yufang1993 时间: 2015-11-12 08:16
标题: 指针与数组中因为变量名容易产生误解的地方,
本帖最后由 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;
}
-
屏幕快照 2015-11-11 09.30.23副本.png
(217.52 KB, 下载次数: 5)
1
作者: yufang1993 时间: 2015-11-12 08:19
作者: 许本亮 时间: 2015-11-12 08:47
学习,学习
作者: yufang1993 时间: 2015-11-12 18:29
互相学习!!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |