免费注册 查看新帖 |

Chinaunix

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

对C语言指针的讨论:应当如何理解、使用指针?《狂人C:程序员入门必备》有奖试读 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-12-12 23:18 |只看该作者
...有点不妥,对“一块内存”的操作,要是我这块内存不是连续的呢,那是一块么? ...
notion001 发表于 2010-12-12 23:15

没见过这种情形
您能否给个例子?

论坛徽章:
0
42 [报告]
发表于 2010-12-12 23:22 |只看该作者
回复  KBTiller
按照你的理解,那么:
int i;
int j;
&i = &j;

能编译通过?这就是指针与地址的区别 ...
jc_zhong 发表于 2010-12-12 22:59

  1.     int i;
  2. int j;
  3. &i = &j;
复制代码
这个编译不能通过并不能说明其不是地址,编译器编译时提示“赋值号(‘=’)左边的操作数必须是一个左值(可以改变的值的变量)”
难道这说明地址不能改变?

论坛徽章:
0
43 [报告]
发表于 2010-12-12 23:23 |只看该作者
没见过这种情形
您能否给个例子?
KBTiller 发表于 2010-12-12 23:18



    很简单,链表就是其中最好的一个,其地址也并不一定在一起

论坛徽章:
0
44 [报告]
发表于 2010-12-12 23:26 |只看该作者
void 的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据。

论坛徽章:
0
45 [报告]
发表于 2010-12-12 23:28 |只看该作者
不赞成这位网友的看法
    指针是一种数据类型,而整数类型是另一种数据类型,他们的运算规则截 ...
KBTiller 发表于 2010-12-12 21:26


《K&R》 Page83
“A pointer is a group of cells (often two or four) that can hold an address. ”
指针--Pointer
地址--Address

指针确实类似于整型变量,由于存储的数据是地址,所以禁止了一些无意义的操作。它允许的操作有:指向同类型数组指针的减法或比较;
同类型指针间的赋值;指针同整数间的加、减运算;将指针赋值为0或与0比较。这些操作都体现了它的整型特性。

另:&是一个取地址运算符,它取得一个变量的地址信息。如果不用,那么在程序下一步就丢掉。而它的存在,恰恰说明了指针的特点。

论坛徽章:
0
46 [报告]
发表于 2010-12-12 23:30 |只看该作者
void 的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据。
notion001 发表于 2010-12-12 23:26


所谓“指向”(Pointer to)是有具体的技术含义的
这个含义就是一元 * 运算得到的是什么
而对于void *类型
压根不可以进行一元 * 运算,所以其实它什么都不指

论坛徽章:
0
47 [报告]
发表于 2010-12-12 23:33 |只看该作者
2.  数组名有两种类型吗?

答:数组名只有一种类型,如char a[10];

其中的a,就是char数组类型,在本函数类是char数组类型,当传给其它函数作参数时:

    比如:func(a);   要理解其实质,C语言里只有传值,传指针的时候也是传入一个值,只不过能通过这个

值找到该数而已。func(a);传入的是a数组的首地址,在其它函数里它已经失去数组这个性质。

    如果要保持 ,可以传func(&a)即可。

论坛徽章:
0
48 [报告]
发表于 2010-12-12 23:35 |只看该作者
所谓“指向”(Pointer to)是有具体的技术含义的
这个含义就是一元 * 运算得到的是什么
而对于void  ...
KBTiller 发表于 2010-12-12 23:30



    这个嘛,只要对其赋值即可。不过对void *赋值后,其实质就变成了指定类型的指针了

论坛徽章:
0
49 [报告]
发表于 2010-12-12 23:36 |只看该作者
《K&R》 Page83
“A pointer is a group of cells (often two or four) that can hold an address. ”
指针--Pointer
地址--Address

指针确实类似于整型变量,由于存储的数据是地址,所以禁止了一些无意义的操作。它允许的操作有:指向同类型数组指针的减法或比较;
同类型指针间的赋值;指针同整数间的加、减运算;将指针赋值为0或与0比较。这些操作都体现了它的整型特性。

另:&是一个取地址运算符,它取得一个变量的地址信息。如果不用,那么在程序下一步就丢掉。而它的存在,恰恰说明了指针的特点。







jc_zhong 发表于 2010-12-12 23:28

指针类似于整型?
int i=1;
int *p = &i ;
i+1和p+1类似吗?显然截然不同
&i是一个指针类型的表达式,为什么非得叫取地址呢
再说它不一定用于变量(变量都有名字)

论坛徽章:
0
50 [报告]
发表于 2010-12-12 23:38 |只看该作者
这个嘛,只要对其赋值即可。不过对void *赋值后,其实质就变成了指定类型的指针了
notion001 发表于 2010-12-12 23:35



    赋值给谁?
    是被赋值的指向,还是void *指向
    这就好比
    int i=3;
    double d;
    d = i ;
    难道能说 i 就是 double类型吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP