if(*(*(str+i)+j))

来源:百度知道 编辑:UC知道 时间:2024/05/24 06:38:42
将放在字符串数组中的M个字符串,按顺序合并成一个新的
1111
222222
33
4444
合并后111122222334444
str是个数组为str[100]

int i,j,k=0;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
if(*(*(str+i)+j))
{a[k]=*(*(str+i)+j);
k++;}
else
break;
a[k]='\0';
}

看不懂这个

if(*(*(str+i)+j))

什么意思??

指针的指针应该存放的是一个地址的地址...

这...
如果说str是二维的话。。。怎么理解

请恕在下愚钝;
if(*(*(str+i)+j));
等同于
if(str[i][j]);

为什么!!

写成这种形式,str一定要是一个二维指针才行啊,如果是一维数组的话也得是指针数组也就是char *str[100]

这个记得《C程序设计》里面好像有讲到,可以形像理解成行指针和列指针。
二维数组名str是一个二维指针(也就是行指针),所谓“行指指”,就像在一个二维数组中,它的值每增加1,指针的实际增量是一行,也就是str指在第一行首,那么str+1是指在第二行首的;对于一个二维指针,*运算同样是取内容,但由于它的内容仍是地址,即*str仍是一个指针,于是*可以理解成是“降级”,将行指针降成了“列指针”,列指针*str同样是指向第一行首,但是它与str不同,它每增1,就是向后移了一个数据元素的位置,也就是说*str+1指向第一行第2个元素。于是,第i+1行的第j+1个元素也就是str[i][j],可以看成先将行指针下移i次,找到行首,即str+i;再从该行首的列指针移j次,找到指向str[i][j]的指针,即*(str+i)+j,这里*是“降级”之用,于是要找的元素就是这个指针的内容:*(*(str+i)+j)

str应该是个二维数组吧??
应该是这样的吧。
char str[][100]={{1,1,1,1},{2,2,2,2,2,2},{3,3},{4,4,4,4}};
if(*(*(str+i)+j));
等同于
if(str[i][j]);即如果str[i][j]不是空的时候,把str[i][j]字符拼接到字符串a的后面。

从里向外看;
*(str+i);相当于str[i];//这是定义
*(*(str+i)+j); 相当于*(str[i]+j);即str[i][j];

指针这里是比较难理解。建议仔细看下书。。了解下。去看看多维指针。

如果还不清楚,百度hi我。。

写成这种形式,str一定要是一个二维指针才行啊,如果是一维数组的话也得是指针数组也就是char *str[100]

这个记得《C程序设计》里面好像有讲到,可以形像理解成行指针和列指针。
二维数组名str是一个二维指针(也就是行指针),所谓“行指指”,就