注册 登录
编程论坛 新人交流区

C语言也太简单了吧(续),指针的指针是什么东西啊,我已经完全掌握了C语言,怎么看不懂啊

beyondyuefei 发布于 2008-08-29 12:14, 9261 次点击
指针的指针是什么东西啊,我看了谭浩强的书,觉得已经完全掌握了C语言,怎么看不懂啊.  task_struct **p ;  这个 **p 什么意思啊,什么"指针的指针" 啊,是不是出版社印刷错误了啊.把指针印刷成"指针的指针" ,把 *p 印刷成 **p.  真是这样我要求出版社给我换一本书!!!!!!
61 回复
#2
liyanhong2008-08-29 12:25
指针的指针  还不是指针嘛

我赞同你的想法  是出版社印错了
#3
liotta2008-08-29 12:45
C本来就是以简洁灵活著称!
C有一本很薄书,The C Programming Language一个星期就能看完。
不过水平就难说了!
#4
csynyk2008-08-29 13:04
呵呵!佩服lz的玩世不恭!
#5
edsanxi5202008-08-29 13:20
楼主真恶心
https://bbs.bccn.net/viewthread.php?tid=229266&highlight=
现在就发这样的帖子
你是不是刚被猪撞了下脑袋 阿
#6
mark02892008-08-29 14:18
楼主在写小说?!
#7
死了都要C2008-08-29 14:32
这说明一个问题```

你连C语言的基础知识都不懂```
#8
silence02008-08-29 15:04
如今说C简单的还没几个人。  你真牛~~~~~~~~~~~
#9
xxwpk0072008-08-29 15:15
指针的指针 都不懂

LZ你学过C吗
#10
liyanhong2008-08-29 15:16
[bo][un]xxwpk007[/un] 在 2008-8-29 15:15 的发言:[/bo]

指针的指针 都不懂

LZ你学过C吗

没学过C怎么知道有C这个语言?
#11
xxwpk0072008-08-29 15:20
回复 10# liyanhong 的帖子
我的意思说LZ没有认真学习C语言
#12
snakealpha2008-08-29 15:20
[bo][un]liyanhong[/un] 在 2008-8-29 12:25 的发言:[/bo]

指针的指针  还不是指针嘛

我赞同你的想法  是出版社印错了

嘎嘎,印错了印错了^^
#13
snakealpha2008-08-29 15:21
[bo][un]mark0289[/un] 在 2008-8-29 14:18 的发言:[/bo]

楼主在写小说?!

还是连载呢,期待第三季^^
#14
蓝色神话2008-08-29 15:30
强悍!
#15
qfyzy2008-08-29 18:44
看好LZ啊,你学好了就做我的老师吧。
#16
n7277233852008-08-29 19:40
没学过!不懂~!
#17
flyue2008-08-29 20:08
yUcHUNdErENyONGyUANjUEdEzIjIzUIcONGmING
#18
davidif2008-08-30 10:48
强悍..
我还在为C语言苦恼啊..
#19
hoodlum19802008-08-30 11:26
那楼主你能看懂和解释下面的代码吗?

#include <stdio.h>

void f(int a, double b)
{
    printf("%d, %lf\n",a, b);
}

void main()
{
    void (*s[10])(int,double)={0,f,0,0};
    (*******************************************s[1])(1, 3.14);
}
#20
jimmy772008-08-30 11:39
楼主还真幽默呢~~~
#21
死了都要C2008-08-30 11:44
19楼的程序虽然看不懂``

但是是建议不要用VOID MAIN
#22
hoodlum19802008-08-30 12:43
[bo][un]死了都要C[/un] 在 2008-8-30 11:44 的发言:[/bo]

19楼的程序虽然看不懂``

但是是建议不要用VOID MAIN


好吧,问题既然是我提出的,我有必要给任何不明白这个问题的人一个解答。

在定规范的时候,大家发现对函数指针变量的使用时,到底是否需要写dereference符号呢,即“数据”和“地址”这个概念上存在模糊和歧义。对于普通的指针,我们的使用非常明确。比如说
int *p; //声明时,'*'表示p是指向Int类型的一个指针。同理可以理解加**或者更多星号的含义。
*p++;  //这时候必须写dereference符号,表示我们对我们指向的数据进行操作。
p++;//这表示我们对指针进行移动。

但函数指针的时候存在这样的模糊:
void (*f)();
我们调用它的时候应该怎么写呢:
如果把f当成指针,应该写成
(*f)();
但是f本身就是地址,所以这样写:
f();
看起来也合理。

上面两种习惯的人都有,所以编译器和标准接受了这种使用上的模糊,即写*和不写*都通过。
因此对于f来说,前面加不加*,f和*f都是它本身的值。因此加再多的*和只写一个*,以及不写*,都没有区别。

[[it] 本帖最后由 hoodlum1980 于 2008-8-30 12:50 编辑 [/it]]
#23
君临天下A2008-09-02 09:00
指针的指针当然有的,
c语言最精华的部分就是指针部分,指针没有学懂可以说你的c语言几乎没学,只是会一些基本的规则而已,
谭浩强都不敢说c语言如此简单,你都敢说  你那是年少轻狂
#24
joyguan2008-09-02 17:08
c语言最精华的部分就是指针部分
#25
zflsky2008-09-02 18:39
楼主真够恶心
#26
zzt_4282008-09-02 21:03
回复
真是好笑!潭浩强那本书上的错误确实多,但是这个不是.
指针的指针你不明白吗?
A指针里面存放的是B的地址,B又是一个指针变量,那么A就是指向指针的指针.
#27
lqyppp2008-09-02 21:58
呵呵……
细心的学习了下
#28
fy8812132008-09-03 11:10
连我这菜鸟都知道指针的指针..
看来楼猪学的的确很好呢 ..
期待楼猪继续有所高级造诣
#29
wjhdwty2008-09-03 14:54
--------我已经完全掌握了C语言,怎么看不懂啊
说明你一点都没有掌握C语言。哈哈
#30
醉罪2008-09-03 17:25
你娃娃脑壳遭门卡了的啊?
#31
未同行2008-09-03 17:46
指针的指针当然有,再来基层都可以的呀,就像19楼写的那段,挺好挺强大...
#32
未同行2008-09-03 17:48
回复 2# 死了都要C 的帖子
为啥不建议用void main()?无返回值嘛
#33
hoodlum19802008-09-03 18:07
改写一下,那么这里p就是指向指针的指针了。

程序代码:
#include <stdio.h>

void f(int a, double b)
{
    printf("%d, %lf\n",a, b);
}

void main()
{
    void (*s[10])(int,double)={0,f,0,0};
    void (**p)(int,double)=s;
    (*******************************************(p+1))(1, 3.14);
}
#34
li0125842008-09-03 21:17
真的就是傻逼一个,连指针的指针都不懂,还说自己是个很会c的人,回家种田吧。
#35
iorivsmu2008-09-04 12:06
问这种问题也叫掌握了C
我也学C有段时间了,对指针虽然认识不是很清,但楼主你说的**P是绝对没问题,不用置疑的,指针的指针的指针的指针都有,只要你愿意.
兄弟在回头去看看去吧.指针被称为C最难掌握的知识之一,是你看下潭浩强的书就能掌握的话,那谁都能去编个WINDOWS出来了.
#36
iorivsmu2008-09-04 12:14
望指教
[bo][un]hoodlum1980[/un] 在 2008-8-30 11:26 的发言:[/bo]

那楼主你能看懂和解释下面的代码吗?

#include

void f(int a, double b)
{
    printf("%d, %lf\n",a, b);
}

void main()
{
    void (*s[10])(int,double)={0,f,0,0};
    (******************************* ...



void (*s[10])(int,double)={0,f,0,0};
是什么意思?这是个什么方法,请指教下,谢谢!
#37
blueboy820062008-09-04 12:22
LZ 挺无聊的,低趣味...
你以前的那贴我也是看过的,觉得恶心....
#38
StarWing832008-09-04 13:27
[bo][un]flyue[/un] 在 2008-8-29 20:08 的发言:[/bo]

yUcHUNdErENyONGyUANjUEdEzIjIzUIcONGmING


你给了我灵感……
程序代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
    int i;
    char buffer[1024];
    while (fgets(buffer,1024,stdin)!=NULL)
    {
        for (i=strlen(buffer)-1 ; i>=0 ; i--)
            buffer[i]=(i&1?tolower:toupper)(buffer[i]);
        puts(buffer);
    }
    return 0;
}
#39
StarWing832008-09-04 13:31
[bo][un]iorivsmu[/un] 在 2008-9-4 12:14 的发言:[/bo]




void (*s[10])(int,double)={0,f,0,0};
是什么意思?这是个什么方法,请指教下,谢谢!


一个十个元素,其类型为指向接受两个参数,无返回值函数的指针的数组,其第二个元素值为函数f的地址。

这种写法不是炫耀就是脑子被门夹了。

typedef void(*func_t)(int,double);
func_t s[10]={NULL,&f};


不过和LZ比起来是好了太多了。LZ完全是人渣。(原谅我吧,忍不住了……)

[[it] 本帖最后由 StarWing83 于 2008-9-4 13:32 编辑 [/it]]
#40
awnucel2008-09-05 05:41
楼主,你看见的只是幻觉,不信撞墙三下,你能看见4颗星,啥时候撞出群星,啥时候就解放了
#41
sdvethen2008-09-05 11:30
愚蠢的人永远觉得自己最聪明
#42
lnhaing2008-09-05 11:33
回复次贴的人也很无聊!(ai ,我也是)
#43
rookie_coder2008-09-06 15:14
楼主很帅,回帖的人都会觉得有趣
#44
wsllsg2008-09-06 19:07
楼上的有道理!!
#45
snakealpha2008-09-06 23:13
顶,不能沉啊,这都坚持了一周多了~~
#46
God_WangY2008-09-07 02:17
lz 在耍宝!
#47
Soulofghost2008-09-07 05:50
LZ几岁? 这不是找骂么。。
#48
StarWing832008-09-07 09:46
建议此帖留着,而且置顶,作为我们BCCN的经典笑话……
#49
missiyou2008-09-07 09:51
[bo][un]beyondyuefei[/un] 在 2008-8-29 12:14 的发言:[/bo]

指针的指针是什么东西啊,我看了谭浩强的书,觉得已经完全掌握了C语言,怎么看不懂啊.  task_struct **p ;  这个 **p 什么意思啊,什么"指针的指针" 啊,是不是出版社印刷错误了啊.把指针印刷成"指针的指针" ,把 *p 印刷成 ...

这个是进程结构,
其实是一个结构二维数组。用指针表示而以。真是的。
#50
StarWing832008-09-07 10:22
LS在说什么?

明明是一个变量,储存着另一个指针的地址嘛,哪里跟二维数组有关系?

虽然引用都可以写成p[0][0],但是注意其原理是完全不一样的!!!
#51
aizhinuo2008-09-07 12:28
指针不就是地址么
指针的指针就是存放地址的指针
12