| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1130 人关注过本帖
标题:关于指针的问题,
只看楼主 加入收藏
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
版主刷贴??
↓↓↓↓
而且不知所云,好搞笑。。。
↓↓↓↓
带着这样的偏见看谭浩强,版主现在看可能没什么,过了一段时间后再来看会不会笑呢?→→→反正我是笑了。
↓↓↓↓
版主继续,加油刷贴。。。
2010-06-03 19:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 11楼 lijm1989
不刷贴不足以证明其书垃圾 ,/

不知所云,上面的两行字颜色是不一样的 ,/

我只是想借这个帖子 ,/ 推荐一本好书 , << c primer plus>>,
远离谭浩强的 << c 语言程序设计>>

另外, 我告诉你, 我从来没正视过谭浩强

[ 本帖最后由 BlueGuy 于 2010-6-3 20:38 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-06-03 20:19
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
以下是引用BlueGuy在2010-6-3 18:20:12的发言:

变量的指针就是变量的地址。
//指针存储的是一个地址, 并不是说 变量的指针就是变量的地址
//指针是个变量, 而地址是个常量

存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。

//一个指针变量的值就是某个变量的地址或称为某变量的指针。
前半句又给他自圆其说对了,后半不句又摸不着头脑了/
指针是什么?指针存储的是一个地址?还有那句什么“指针是个变量, 而地址是个常量”。
    版主一直强调这个,指针一定是个变量么?我相信版主肯定玩过底层的东东,可为什么还是这样认为我就不知道了。
    我想问问版主,指针不能是常量? 如果加了const 修饰的话,例如:const int *p; p=&a; 那这个p 是个变量还是说它加了
    个const 它就不能叫做指针了?  指针没有常量?太搞笑了吧~~~
敢问计算机能够储存东东的是什么?“指针存储的是一个地址, 并不是说 变量的指针就是变量的地址”这句话怎么理解?我看着才晕呢~~~
--------------------------------------------------------------------------------------------------------------
以下是引用BlueGuy在2010-6-3 18:28:38的发言:

引用[谭浩强C语言全书word版]10.2

严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

//牛头不对马嘴,指针就是一个变量,相当于用int类型所定义的变量,
同上。我感觉解释的挺好,被版主BS了。版主的字典里,常量已经消失了。
---------------------------------------------------------------------------------------------------------------
以下是引用BlueGuy在2010-6-3 18:44:18的发言:

引用[谭浩强C语言全书word版]10.2

通过指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变量要费时间,而且不直观,因为通过指针要访问哪一个变量,取决于指针的值(即指向),例如"*p2=*p1;"实际上就是"j=i;",前者不仅速度慢而且目的不明。但由于指针是变量,我们可以通过改变它们的指向,以间接访问不同的变量,这给程序员带来灵活性,也使程序代码编写得更为简洁和有效。
// 不知所云
// j = i; 怎么就目的不明了?
版主哪怕肯花上几秒钟再看一遍,他到底说哪个目的不明了了?哪个是前者?  我现在是真的不知所云。
---------------------------------------------------------------------------------------------------------------
以下是引用BlueGuy在2010-6-3 18:46:25的发言:

引用[谭浩强C语言全书word版]10.2
main()
{ int a,b;
  int *pointer_1, *pointer_2;
  a=100;b=10;
  pointer_1=&a;
    pointer_2=&b;
  printf("%d,%d\n",a,b);
  printf("%d,%d\n",*pointer_1, *pointer_2);
}
 
对程序的说明:
在开头处虽然定义了两个指针变量pointer_1和pointer_2,担它们并未指向任何一个整型变量。只是提供两个指针变量,规定它们可以指向整型变量。程序第5、6行的作用就是使pointer_1指向a,pointer_2指向b。

// pointer_1已经指向了一个不确定的地址
版主这句我赞同,不过不知道现实中版主有多好的编程习惯?无数人都这样,你干嘛非只在这个时候说?<< c primer plus>>没看过,不知道它那里多规范。有机会见识下。
------------------------------------------------------------------------------------------------------------
最后一个不评价。
------------------------------------------------------------------------------------------------------------
搞得我一直和版主过意不去的样子,我只希望版主能够少点偏见。谭浩强他没有你想的那么差。只是因为你带个有色眼镜了。
    他老人家参与编写的书百多本,任何一个人,只要不太笨,那些东东都熟的不能再熟了,经验有多重要,版主出来混了,还不明白?或者版主直接当他傻子一个?就算他是傻子,出的书错误超多,但早在一开始就会被无数读者指正了。出了那么多书,人再差出的书都被读者改漂亮了。不是么?
    再说他获的奖说不上无数至少也可以拿出来炫耀下了吧?人家再差,也不至于你想的那样吧?版主就不相信“盛名之下,其实难副”?
    当然,他的书也有一些错误,这是很难避免的,版主有时间出本技术书就知道了,为什么新手问入门好书的时候,无数人都推荐他的书,可想而知。莫非大家都傻了不成?
2010-06-03 22:23
平常心飞儿
Rank: 2
来 自:内蒙古科技大学
等 级:论坛游民
帖 子:14
专家分:23
注 册:2010-6-3
收藏
得分:0 
2楼的有错误  必须有返回值!!
2010-06-03 22:40
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
/*版主一直强调这个,指针一定是个变量么?我相信版主肯定玩过底层的东东,可为什么还是这样认为我就不知道了。
我想问问版主,指针不能是常量? 如果加了const 修饰的话,例如:const int *p; p=&a; 那这个p 是个变量还是说它加了
个const 它就不能叫做指针了?  指针没有常量?太搞笑了吧~~~
*/

你的理解无可厚非
我所说的常量是个数值,并不是一块不可修改的内存
用const 操作符修饰变量,只是说这个变量不可修改, 并不是说这个变量是个 (const)常量
这是由编译器拒绝修改const 操作符修饰的变量。

/*
敢问计算机能够储存东东的是什么?
*/
晕, 答非所问了,不过这问题问的真够雷人的,

我当然知道计算机存储的是什么,计算机能够存储的是二进制数据,关键是看编译器怎么去解析数据。
比如说一个字节FF,用unsigned char 定义的变量去存储它,它就是255, 用 signed char 定义的变量去存储它,它就是
-1。

/*
指针存储的是一个地址, 并不是说 变量的指针就是变量的地址”这句话怎么理解?我看着才晕呢~~~
*/
指针是个变量,其存储的数值是一个地址, 有什么不可理解的吗?

/*
严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。
//牛头不对马嘴,指针就是一个变量,相当于用int类型所定义的变量,
同上。我感觉解释的挺好,被版主BS了。版主的字典里,常量已经消失了。
*/
你按照他的思路去理解指针,当然会觉得他解释的挺好,
我对常量,可修改的变量,不可修改的变量分的很清楚。

/*
通过指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变量要费时间,而且不直观,因为通过指针要访问哪一个变量,取决于指针的值(即指向),例如"*p2=*p1;"实际上就是"j=i;",前者不仅速度慢而且目的不明。但由于指针是变量,我们可以通过改变它们的指向,以间接访问不同的变量,这给程序员带来灵活性,也使程序代码编写得更为简洁和有效。
// 不知所云
// j = i; 怎么就目的不明了?
版主哪怕肯花上几秒钟再看一遍,他到底说哪个目的不明了了?哪个是前者?  我现在是真的不知所云。
*/

我看的很清楚,他先说 "指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变量要费时间,而且不直观"

而后又说"由于指针是变量,我们可以通过改变它们的指向,以间接访问不同的变量,这给程序员带来灵活性,也使程序代码编写得更为简洁和有效"

到底是间接仿问快,还是直接仿问快 ??

"例如"*p2=*p1;"实际上就是"j=i;",前者不仅速度慢而且目的不明"
我对他非常了解,我知道他想说什么 ,/他无非是想说 指针仿问内存快,目的明确
我只是顺水推舟罢了,/

/*
搞得我一直和版主过意不去的样子,我只希望版主能够少点偏见。谭浩强他没有你想的那么差。只是因为你带个有色眼镜了。
    他老人家参与编写的书百多本,任何一个人,只要不太笨,那些东东都熟的不能再熟了,经验有多重要,版主出来混了,还不明白?或者版主直接当他傻子一个?就算他是傻子,出的书错误超多,但早在一开始就会被无数读者指正了。出了那么多书,人再差出的书都被读者改漂亮了。不是么?
    再说他获的奖说不上无数至少也可以拿出来炫耀下了吧?人家再差,也不至于你想的那样吧?版主就不相信“盛名之下,其实难副”?
*/

/*
他老人家参与编写的书百多本,任何一个人,只要不太笨,那些东东都熟的不能再熟了
*/
我不相信看他的书能把那些东东搞的 熟的不能再熟了, 他的书本有很多基本的概念性错误。


/*
当然,他的书也有一些错误,这是很难避免的,版主有时间出本技术书就知道了,为什么新手问入门好书的时候,无数人都推荐他的书,可想而知。莫非大家都傻了不成?
*/

有的人十年出一本书。 有的人一个月出了一本书,10年不更新,




[ 本帖最后由 BlueGuy 于 2010-6-5 10:39 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-06-04 21:33
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
不想咬文嚼字,版主可以试着在某个搜索引擎上打入 “常量”之类的关键字,然后随便点几个网页看看意思和版主一致不。
其它文字类的也不玩了~~不好玩。。

不过下面的我想替tan老再说说:

通过指针访问它所指向的一个变量是以间接访问的形式进行的,所以比直接访问一个变量要费时间,而且不直观,因为通过指针要访问哪一个变量,取决于指针的值(即指向),例如"*p2=*p1;"(比j=i;先出现,这里是前者吧?)实际上就是"j=i;"(在*p2=*p1后出现,不是后者吧?)),前者(难道不是“*p2=*p1”)不仅速度慢而且目的不明。但(这个但字表转折)由于指针是变量,我们可以通过改变它们的指向,以间接访问不同的变量,这给程序员带来灵活性,也使程序代码编写得更为简洁和有效。
   
 他的意思可能恰恰和版主的意思一样耶, *p2=*p1,通过指针访问它所指向的一个变量是以间接访问的形式进行的, 速度比不上一个直接的j=i;那样使用 指针的目的也不明确,不直观, p2是什么?p1又是什么?
    后面接着一个“但”,意思说,虽然是前面那样(如果是按版主的理解,这个但不应该出现吧?),但并不是说指针是没用的,因为指针变量具有“可以通过改变它们的指向,以间接访问不同的变量”的优势,有的时候(如数组或大型数据),可以利用地址的连续性(数组),或指针的改变指向(链表)来灵活地进行一些操作,这样比用直接变量好多了吧?不能达到这句话的效果?--->  也使程序代码编写得更为简洁和有效.
---------------------------------------------------------------------------------------------------------------
至于他的书是不是垃圾,我不好说什么,版主可以继续在某个搜索引擎中输入关键字为 “C语言入门 书”之类的关键字,看看推荐他的书的有多少。
↓↓↓↓↓↓↓↓↓↓↓↓
我想说,如果你发现大多数人都在逆行的时候,是不是该想想,会不会是自己在逆行呢?
2010-06-04 22:48
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  俄,说明一下,我不是他的fans,我也没看完过他的一本书,我也是看到他的书中有一些错误然后就没看了。      
  不是想说他有多优秀,而是想提醒下版主,有点偏极端了。                                                  
  还有一个原因就是日子太无聊,想找骂了,可惜版主给了点面子    = =!                                    
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
2010-06-04 23:03
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
版主可以试着在某个搜索引擎上打入 “常量”之类的关键字,然后随便点几个网页看看意思和版主一致不。
//尽信书不如无书,何况是参差不齐的网页呢 ,/

const int *p; p=&a; 那这个p 是个变量还是说它加了个const, 它就不能叫做指针了?  指针没有常量?太搞笑了吧
//首先你写错掉了,const int *p 是说 p 指向的内存不能通过*p修改, 不是说p本身不能修改, 此时p还可以指向另一个变量

看这样一个程序段
int green= 0;
const int *blue = &green;
这并不是说 p是一个常量, 或者说 green是一个常量
只是说不能通过*blue去修改 green;


看这样一个程序段
//设计函数,寻找某字符串中是否有给定的字符,若有,则返回该字符,否则返回0
#include <stdio.h>
#include <string.h>

typedef int bool;
enum boolean{false, true};

bool search (const char *list, int size, char key, char *rec );
void reverse(char *list);

int main(void)
{
    char blueguy[20] = "greengirl";
    char ch = 0;

    if (search (blueguy, strlen(blueguy)+1, 'e', &ch))
        printf("%c\n", ch);
   
    reverse(blueguy);

    return 0;
}

bool search (const char *list, int size, char key, char *rec )
{
    bool found = false;
    int i;

    for ( i = 0; i < size; i++ )
    {
        if ( key == list[i] )
        break;
    }
    if ( i < size )
    {
        found = true;
        *rec = list[i];
    }

    return found;
}

void reverse(char *list);
{
#pagram print(Not Implement)
}
search()函数用了 const 修饰符 保护数组内容,此函数内 blueguy相当于一个常量数组,但是在其他未使用 const修饰符的函数内(reverse()函数),数组还是个常量数组吗??

我也不喜欢咬文嚼字,不过有的人(当然不是说lijm1989了)不喜欢咬文嚼字, 是因为他连基本的概念都理解的不透彻 ,/ 咬不起来文字.

至于他的书是不是垃圾,我不好说什么,版主可以继续在某个搜索引擎中输入关键字为 “C语言入门 书”之类的关键字,看看推荐他的书的有多少。
//我知道要想证明其书垃圾,不是一天两天的事情,是个旷日持久、艰难坎坷的历程。
有时间,我会转载几篇评论的比较好的帖子,/让论坛朋友一步步远离谭浩强

[ 本帖最后由 BlueGuy 于 2010-6-5 10:50 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-06-05 10:02
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
int green= 0;
int * const blue = &green;
的确,网页上基本都是这里copy那里copy,跟新闻一样。。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
那就等版主转咯...
2010-06-05 12:34
baiyyddd
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:33
专家分:61
注 册:2010-5-10
收藏
得分:0 
子函数中变量n的作用是啥?
2010-06-05 17:13
快速回复:关于指针的问题,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029080 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved