📄 subject_32294.htm
字号:
<p>
序号:32294 发表者:lzh08 发表日期:2003-03-11 12:01:13
<br>主题:学习《c++primer》遇到的一个问题,很是困惑,求助!
<br>内容:以下代码,是从《c++ primer》这本书上摘录的, int lexicoCompare (const string &,const string &);<BR> int sizeCompare(const string &,const string &);<BR><BR> typedef int (*PFI2S)(const string &,const string &);<BR> PFI2S compareFuncs[2] = <BR> {<BR> lexicoCompare,<BR> sizeCompare<BR> };<BR>PFI2S (*pfCompare)[2] = &compareFuncs; <BR>其中,*pfCompare是指向指针数组的指针,如果这个可以成立,那么,为什么下边一段代码就编译不过去?<BR>static char * name[] ={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};<BR>char (*pi)[5] = &name;<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:xiongli 回复日期:2003-03-11 18:15:15
<br>内容:int num1,num2;<BR>int *num[]={&num1,&num2};<BR>int qq[2];<BR>int (*pnum)[2]=&qq;<BR>int **kk=num;<BR><BR>问题是指针数组和指向指针的指针.<BR>int *num[]={&num1,&num2};定义的是一个指针数组,就是说这个数组里面的元素是指针.而且是放的一个&int ,而不是放的一个int 数组名,所以说num是int **.而对于num本身来说,则是一个int **,所以说int **kk=num可以编译.<BR><BR>然后看int qq[2];定义的是一个数组,而且容量两个元素.qq是一个int *,但是&qq是一个什么东西呢?你可能说因为qq是一个int *,所以&qq是一个int **.但问题是qq不是普通的int*,而是定义了维数为2的int *,也就是说如果对&qq做+1操作的话,我们是希望他跳int[2]个字节,而不是想int ** 做+1那样跳一个int*的字节.所以同样是指向指针的指针,但是一个来自数组,定义了维数,一个来自&int,就只有一个int,所以为了指针的指针做运算处理,需要说清楚.<BR>所以int (*pnum)[2];定义了一个指向维数为2的int数组的指针.那么他就可以顺利通过int (*pnum)[2]=&qq;而普通的int **就不可以.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:xiongli 回复日期:2003-03-11 18:30:31
<br>内容:static char * name[] ={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};<BR><BR>char *(*urptr)[5]=&name;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -