黑马程序员技术交流社区

标题: C语言-指针指向的提问。 [打印本页]

作者: sdzwb89    时间: 2015-5-19 14:33
标题: C语言-指针指向的提问。
本帖最后由 sdzwb89 于 2015-5-20 13:05 编辑
  1. // 定义一个int类型的数组
  2. 2 int a[4] = {1, 2, 3, 4};
  3. 3
  4. 4 // 定义一个int类型的指针,并指向数组的第0个元素
  5. 5 int *p = a;               
复制代码


第5行的 int *p =a;  跟 int *p = a[0]; 有区别吗?不是很清楚,求解答!

作者: gclforios    时间: 2015-5-19 14:52
有区别的,第5行int *p = a为初始化int型指针为数组首地址,而 int *p = a[0];是错误的,a[0]表示的是数组中第一个元素数值而非地址,
作者: stein    时间: 2015-5-19 14:56
int *p = a[0] ,   p 是 指针,   a[0] 是具体数值 1 , 等号 左右两边 类型不一样, 不能赋值 报错.
作者: sdzwb89    时间: 2015-5-19 15:03
stein 发表于 2015-5-19 14:56
int *p = a[0] ,   p 是 指针,   a[0] 是具体数值 1 , 等号 左右两边 类型不一样, 不能赋值 报错. ...

是不是 *p=&a[0]; 和*p=a;是一样的?
作者: stein    时间: 2015-5-19 15:26
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     // 定义一个int类型的数组
  5.     int a[4] = { 1, 2, 3, 4 };

  6.     // 定义一个int类型的指针,并指向数组的第0个元素
  7.     int * p1 = a;
  8.     int *p2 = &a[0];

  9.     printf("%d\n",p1 == p2); // 1 表示一样..  0 表示不一样..

  10.     return 0;
  11. }
复制代码

作者: 等风继续吹    时间: 2015-5-19 21:27
嘿嘿,我还没注意到,这点要注意
作者: 追随自然    时间: 2015-5-19 22:43
a[0]代表的是第一个元素, int*p=&a[0]; int*p=a;是一样的
作者: shao    时间: 2015-5-20 23:14
过来学习下。。。。。。。。。。。。。
作者: 用晦而明    时间: 2015-7-7 17:23
第5行应该是错的
首先 P是指向int型的指针变量
而a是一个有4个int型元素的数组
   int * p1 = a; 这样做是不合理的
如果 想指向第一个元素应该   int * p1 = &a[0];




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2