黑马程序员技术交流社区

标题: 什么是指针,不懂的速进 [打印本页]

作者: 奇迹    时间: 2014-5-15 13:14
标题: 什么是指针,不懂的速进
本帖最后由 奇迹 于 2014-5-17 03:34 编辑

一个函数一个栈
一个指针就是个数字而已,他指向内存地址
函数是指针
数组是指针
就是这么一回事,
不懂的请回复,我会详细的解答
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    int a_xx[]={1,23};
    printf("%d==%d\n",a_xx,&a_xx);
    return 0;
}
结果:
1606416624==1606416624
很多同学都说数组不是指针,以上代码已经证实。
不要怀疑数组不是指针的问题

作者: 251638256    时间: 2014-5-16 22:32
;P呵呵 数组不是指针吧
作者: 奇迹    时间: 2014-5-16 23:18
251638256 发表于 2014-5-16 22:32
呵呵 数组不是指针吧

你可以温习下基础
作者: lvc    时间: 2014-5-17 02:43
数组不是指针
作者: 奇迹    时间: 2014-5-17 03:25
lvc 发表于 2014-5-17 02:43
数组不是指针

你可以温习下基础
作者: 奇迹    时间: 2014-5-17 03:33
奇迹 发表于 2014-5-17 03:25
你可以温习下基础

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
    int a_xx[]={1,23};
    printf("%d==%d\n",a_xx,&a_xx);
    return 0;
}
结果:
1606416624==1606416624


不懂的可以继续回复提问,我会详细解答
作者: huangqiwa    时间: 2014-5-17 17:47
我人为通常情况下a_xx跟&a_xx是一样的 都代表1606416624这个内存地址
但是你对a_xx+1操作  和&a_xx+1操作的结果是不一样的
换句话说指向a_xx的指针类型跟指向&a_xx的类型是不一样的
前者应该是int形 而后者应该是整个数组类型  
作者: 一只小菜鸟    时间: 2014-5-17 22:04
char  *a = "gg";
char b[] = "gg";
一个可变,一个不可变,你确定指针 就是数组?
作者: Sniper_YJ    时间: 2014-5-17 22:28
ding yi ding
作者: 奇迹    时间: 2014-5-19 22:26
huangqiwa 发表于 2014-5-17 17:47
我人为通常情况下a_xx跟&a_xx是一样的 都代表1606416624这个内存地址
但是你对a_xx+1操作  和&a_xx+1操作的 ...

对的,!!!
作者: 奇迹    时间: 2014-5-19 22:27
一只小菜鸟 发表于 2014-5-17 22:04
char  *a = "gg";
char b[] = "gg";
一个可变,一个不可变,你确定指针 就是数组?

你可以自己试试看,。看看地址是不是一样的
作者: 一只小菜鸟    时间: 2014-5-19 23:05
本帖最后由 一只小菜鸟 于 2014-5-19 23:07 编辑
奇迹 发表于 2014-5-19 22:27
你可以自己试试看,。看看地址是不是一样的

呵呵  地址一样,就是相同的东西了?  
printf("%d==%d\n",a_xx+1,&a_xx+1);  那你告诉我这两个相不相同,
一个指向int*,一个指向 int(*)[],既然一样 何来区分char  *a = "gg";
char b[] = "gg";  你让我试什么?
还有面试有一题问你的就是指针和数组的区别,你能告诉我怎么回答么。



作者: 奇迹    时间: 2014-5-20 01:38
一只小菜鸟 发表于 2014-5-19 23:05
呵呵  地址一样,就是相同的东西了?  
printf("%d==%d\n",a_xx+1,&a_xx+1);  那你告诉我这两个相不相同 ...

你硬要钻牛角尖我也没法
作者: 一只小菜鸟    时间: 2014-5-20 12:32
奇迹 发表于 2014-5-20 01:38
你硬要钻牛角尖我也没法

我只是不希望你误导别人罢了
作者: 奇迹    时间: 2014-5-20 13:39
一只小菜鸟 发表于 2014-5-20 12:32
我只是不希望你误导别人罢了

我没有误导,只是看你怎么理解而已
作者: 徐开伟    时间: 2014-6-6 13:01
奇迹 发表于 2014-5-19 22:27
你可以自己试试看,。看看地址是不是一样的

这2个的地址应该不是一样的额,  一个是常量空间里面的地址,一个是栈里面的地址。
作者: 奇迹    时间: 2014-6-6 13:02
徐开伟 发表于 2014-6-6 13:01
这2个的地址应该不是一样的额,  一个是常量空间里面的地址,一个是栈里面的地址。 ...

你是在挖坟呢
作者: 徐开伟    时间: 2014-6-6 13:07
{:3_59:}还真挖出僵尸了 哈哈。。
作者: qddnovo    时间: 2014-6-7 17:12
我记得数组名是数组第一个指针,并且是最外级指针(还有多维数组的时候)。楼主的表达应该详细点嘛,容易误解。
作者: 郝义涛    时间: 2014-6-11 16:06
这个问题,我感觉这个例子有点牵强,数组不能说是指针,只是数组名存储的是数组的地址而已,而且&是引用,为什么这两个相等,说明数组是指针嗯
作者: 抱0抱    时间: 2014-6-12 22:13
最近正在上基础班看指针这里,灯有问题了一定请教!
作者: suiseo    时间: 2014-6-18 10:37
不要怀疑数组不是指针的问题
作者: blz01003hm    时间: 2014-6-19 12:04
数组应该算指针,它指向数组首地址。
作者: 抱0抱    时间: 2014-6-19 16:25
我感觉数组比如a[11],a是代表a[0]的地址,那么后续的其他应该就不是地址了吧
作者: eniuovn    时间: 2014-6-20 22:23
看到你们的争论,感觉基础确实很重要:D
作者: 小太阳    时间: 2014-6-22 14:04
等同与否不可一概而论,我仍然认为数组和指针有很多不同的地方的
作者: 脸滚键盘    时间: 2014-7-1 13:43
对于数组就是指针的概念,请参考《C专家编程》81页,但数组和指针绝大多数用法都是相同的,看个人理解了,其实会用才是最好,细微的差别了解一次就记住了,用的时候自然会注意到
作者: kissing    时间: 2014-7-2 09:47
好基础的问题啊
作者: 黑马贾永强    时间: 2015-6-17 01:43
就是一个地址
作者: 黑马贾永强    时间: 2015-6-17 01:44
指针 要多读书 书读百遍其义自现
作者: funy    时间: 2015-7-20 22:45
这个 好有深度啊
作者: ylxkab    时间: 2015-8-8 22:22
越看越糊涂

作者: 泡泡龙    时间: 2015-8-9 20:11
数组名不是指针,只是一个地址
作者: 黑马中的小绵羊    时间: 2015-8-9 22:35
指针就是相当于地址
作者: 李博文    时间: 2015-8-10 10:10
6666666666666
作者: tianmoqingcheng    时间: 2015-8-10 23:08
今天刚学过,不过还是有点蒙
作者: HighPower    时间: 2015-8-16 16:58
我们就业班的老师刚强调过数组不是指针,某些情况下可以通用而已.
作者: Pythoner    时间: 2015-8-24 23:53
指针与数组的特性总结
指针数组
保存数据的地址,任何存入指针变量p的数据都会被当做地址来处理。p本身的地址由编译器另外存储,存储在哪里,我们并不知道。保存数据,数组名a代表的是数组首元素的首地址而不是数组的首地址。&a才是整个数组的首地址。a本身的地址由编译器另外存储,存储在哪里,我们并不知道。
间接访问数据,首先取得指针变量p的内容,把它作为地址,然后从这个地址提取数据或向这个地址写入数据。指针可以以指针的形式访问*(p+i); 也可以以下标的形式访问p。但本质都是先取p的内容然后加上i*sizeof(类型)个byte作为数据的真正地址。直接访问数据,数组名a是整个数组的名字,数组内每个元素并没有名字。只能通过“具名+匿名”的方式来访问某个元素,不能把数组当一个整体来进行读写操作。数组可以以指针的形式访问*(a+i); 也可以以下标的形式访问 a。但其本质都是a所代表的数组首元素的首地址加上i*sizeof(类型)个byte作为数据的真正地址。
通常用于动态数据结构通常用于存储固定数目且数据类型相同的元素。
相关的函数为malloc和free隐式分配和删除
通常指向匿名数据(当然也可指向具名数据)自身即为数组名


作者: pyy061    时间: 2015-8-29 22:36
标题不错,不过进来以后更加不懂了
作者: LucienER    时间: 2015-8-30 09:52
指针是指针 数组是数组吧? 就像西瓜是西瓜 冬瓜是冬瓜 他们都可以吃 但不能说西瓜就是冬瓜吧?
作者: 田智广    时间: 2015-10-1 20:22
指针好难啊!!!
作者: hailiqh    时间: 2015-10-2 09:52
数组的访问原理是指针。
作者: FTD    时间: 2015-10-8 23:16
还是不要误导别人了把.数组是数组,指针是指针,请去看看数组和指针的定义.定义都不一样,怎么可能数组是指针,指针是数组呢?我来告诉你为什么你返回的结果是一样的把!因为你定义的这个指针指向了数组的第一元素,通俗的说也就是数组的名称,定义了数组,它本来就有内存地址的.
作者: jacob_ios    时间: 2015-10-9 22:21
正在学习基础中
作者: daizping    时间: 2015-10-10 16:16
数组名即数组的首地址,地址才是指针吧
作者: 越学越笨    时间: 2015-10-12 20:03
还好看了之后还是不太懂
作者: 强者之路    时间: 2015-11-16 23:34
经典啊 学好了 看透了
作者: 陈新新    时间: 2015-11-17 15:12
解释的好
作者: youngrivers    时间: 2016-1-21 13:14
然而并没有什么乱用,根本就不是一样的,数据结构都不一样
作者: 威-wade    时间: 2016-1-21 17:54
可以看看
作者: qhw_fight    时间: 2016-4-3 23:12
a_xx,&a_xx,这都代表地址,为什么要用%d打印,不是要用%p?
作者: guozhicheng    时间: 2016-4-15 22:08
咱们在java里边不是说引用么. 您说的指针和C里指针是一回事么?
作者: baby14    时间: 2018-7-31 08:03
多谢分享




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