免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: cviolet
打印 上一主题 下一主题

指针问题请教 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-07-12 20:44 |只看该作者
1. 你的代码跟数组关系不大, a可不是一个数组;
2. a和&a可是两个东东
如果a是杯子里的水的话,&a就是盛水的杯子

原帖由 cviolet 于 2007-7-12 20:37 发表 #include <stdio.h>
main()
{ char **p;
  char *a="hello";
  printf("%o\n",a);
  printf("%o\n",&a);  //即便是&a 指向的是一维数组的类型
                      //  a 指向一维数组的第0个元素是指向整型类型
                      //至少 在值上它们应相等啊,为什么?                 
  //p=NULL;
  p=&a;
  printf("%s\n",*p);
}

论坛徽章:
0
12 [报告]
发表于 2007-07-12 20:58 |只看该作者
原帖由 ypxing 于 2007-7-12 20:44 发表
1. 你的代码跟数组关系不大, a可不是一个数组;
2. a和&a可是两个东东
如果a是杯子里的水的话,&a就是盛水的杯子


谢谢,我搞错了,我把 a当成是字符数组。
如果是 int a[]={1,2,3};
          在值上 &a=a 是成立的。
因为我们老师老说 字符串常量是字符数组,所以自己老想着
char *a="hello"; 把a 当成数组了。
应该是理解成 char b[]="hello";
                    char *a;
                     a=b;
                    这样&a 就和 b 不是一回事了。
             &a是指针变量a 的地址.
再请问一下 int a[]={1,2,3};
          在值上 &a=a 是成立的,
但&a指的是什么呢??是指向一维数组的指针吗?是不是 int (*P)[]这样的类型??

[ 本帖最后由 cviolet 于 2007-7-12 21:01 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2007-07-12 21:28 |只看该作者
原帖由 cviolet 于 2007-7-12 20:58 发表

谢谢,我搞错了,我把 a当成是字符数组。
如果是 int a[]={1,2,3};
          在值上 &a=a 是成立的。
因为我们老师老说 字符串常量是字符数组,所以自己老想着
char *a="hello"; 把a 当成数组了。
应该 ...


我的思路是这样的:
int a[]={1,2,3};
a是数组名,代表数组首地址,指向的元素,是 int * 型
如果 int a[][4]={1,2,3,4,5,6,7,8}
则 a 的类型是 (*)[4]型 指向的是整个0行
a[0]是0行0列,在值上 a=a[0] 但类型不同
而&a[0]和a 的性质是一个样的。
我想对于一维数组来说 int a[]={1,2,3}
则&a 因为对一维数组来说a是指向列的,参考二维数组的道理
指向列的使用 &操作就变为指向行的(我们用的课本是谭浩强)
所以理象 &a是 (*)[4]
可是a不是变量只是常量而已代表的是地址,&a有意义吗??费解啊。

论坛徽章:
0
14 [报告]
发表于 2007-07-12 21:34 |只看该作者
虽然a与&a的值是一样的,但是他们的含义是不同的。
如 char a[5],则a是指向字符型的一个指针,&a是一个指向有5个字符的数组的指针(把数组想成一个整体)。
如果a的值是0x0000
a+1    0x0001
&a+1  0x0005


以前有几个帖子是讨论这个问题的,你搜索一下

论坛徽章:
0
15 [报告]
发表于 2007-07-13 11:40 |只看该作者
10楼第一个问题,不是都说了嘛..
对于int a[] = {1,2,3},&a是指向int[3]的变量.假如数组的首地址是0.那么a和&a就都是0.
但是a+1就是0+sizeof(int)*1=4.
而&a+1就是0+sizeof(int)*3*1=12.
第二个问题,楼主你混淆了char*和char[].在这里a是一个指针.它当然有它的值.
它的值和它在内存中的地址怎么能一样呢?

论坛徽章:
0
16 [报告]
发表于 2007-07-13 11:41 |只看该作者
建议看<C专家编程>.里面详细讲解了[]和*的区别.很多人都被一些书籍误导了,而认为数组和指针是一个东西.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP