黑马程序员技术交流社区

标题: 已被指针搞蒙圈,求高人、大神指点,感激不尽。。。 [打印本页]

作者: lixiaob626    时间: 2015-9-5 21:26
标题: 已被指针搞蒙圈,求高人、大神指点,感激不尽。。。
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
访问 第一行的第1个元素地址表示:

a + 1 =  &a[1]  =  a[1]  =  &a[1][0]  =  *(a + 1)

关于这个 a + 1 = *(a + 1) 不是很明白?a + 1是一个地址,而 *(a + 1)是一个值 他们能相等嘛? 第一感觉是这样的,但有人说他们确实相等。求高人、大神指点。。。感激不尽!

作者: asinzuo    时间: 2015-9-5 22:07
首先第一句话你写错了 int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};  前面不要写3和4,后面已经写出具体的数组元素了,前面不可以加上数组的长度
作者: asinzuo    时间: 2015-9-5 22:11
第二,完全看不懂你想问的问题,你能否把问题完整的描述一下?
作者: kenfans    时间: 2015-9-5 22:12
菜鸟帮顶
作者: 舒旺    时间: 2015-9-5 22:12
不错  赞一个
作者: BG6FVG    时间: 2015-9-5 22:25
不懂!!!!!!!!!!!!!
作者: wunairensheng95    时间: 2015-9-5 22:49
你确定这个问题应该拿到Java专区来问?不应该去c那里求答案么   
作者: forjunjian    时间: 2015-9-5 23:15
java 也有指针这说法的么,你不说俺也不知道
作者: lion_good    时间: 2015-9-6 08:18
a+1 为右值,怎么能被赋值?你的意思是 a + 1 == *(a + 1) ?
作者: chensheng06    时间: 2015-9-6 08:27
以前学C++ 最烦 的就是指针了,虽然确实蛮好用的
作者: lixiaob626    时间: 2015-9-6 10:35
wunairensheng95 发表于 2015-9-5 22:49
你确定这个问题应该拿到Java专区来问?不应该去c那里求答案么

恩 好的   谢谢提醒。。。
作者: lixiaob626    时间: 2015-9-6 10:37
lion_good 发表于 2015-9-6 08:18
a+1 为右值,怎么能被赋值?你的意思是 a + 1 == *(a + 1) ?

对  就是==   我少写了一个等号
作者: lixiaob626    时间: 2015-9-6 10:38
chensheng06 发表于 2015-9-6 08:27
以前学C++ 最烦 的就是指针了,虽然确实蛮好用的

恩  所以必须要学会弄懂啊  免得以后跟不上  这个太重要啦!
作者: lixiaob626    时间: 2015-9-6 10:40
kenfans 发表于 2015-9-5 22:12
菜鸟帮顶

谢谢。。。
作者: 专打饭桶    时间: 2015-9-6 20:06
本帖最后由 专打饭桶 于 2015-9-6 20:12 编辑

数组的名称代表的是指向数组的指针,所以a代表的是指针,即指向该数组的指针,a+1,表示指针后移即下标为a[1]的地址,a+1和*(a+1),的确是不相等的,一个是下标为1的地址、一个是下标为1的数值。  a+1 == &a[1];  a[1] == *(a+1);  数组和指针的最紧密的关系就是数组的名称就是指向数组的指针,要明白这个。
作者: lixiaob626    时间: 2015-9-6 21:47
专打饭桶 发表于 2015-9-6 20:06
数组的名称代表的是指向数组的指针,所以a代表的是指针,即指向该数组的指针,a+1,表示指针后移即下标为a[ ...

恩  好的   谢谢解答。。。




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