再问两指针数组
再问两个程序,如下:#include<string.h>
void main()
{
char *string={"data structure","computer design","c language"};
char **p1,**p2,*p;
p1=&string;p2=&string;
if(strcmp(*p1,*p2)>0)
{
p=*p1;*p1=*p2;*p2=p;
}
p2=&string;
if(strcmp(*p1,*p2)>0)
{
p=*p1;*p1=*p2;*p2=p;
}
p1=&string;
if(strcmp(*p1,*p2)>0)
{
p=*p1;*p1=*p2;*p2=p;
}
for(i=0;i<3;i++)
printf("%s\n",string);
}
---------------------------------------------------------------------------------------------------------------
#include<string.h>
void main()
{
char *string={"data structure","computer design","c language"};
char *p;
int i;
if(strcmp(string,string)>0)
{
p=string;string=string;string=p;
}
if(strcmp(string,string)>0)
{
p=string;string=string;string=p;
}
if(strcmp(string,string)>0)
{
p=string;string=string;string=p;
}
for(i=0;i<3;i++)
printf("%s\n",string);
}
这样两对指针数组里面元素排序的程序,为什么第一个程序是实现string元素值的交换,而第二个程序只是实现指向的改变呢?不是两程序都是实现指向的改变吗? 首先,不會顯示正確答案
printf("%s\\n",string);不合法,string是char**,但%s要求char*格式
成string
在第一個例中把*p1/*p2當成元素值便真是元素值交換 怎么会把*p1 当作值来交换呢?它不也只是地址吗? 数组在内存中是线性排列的...在第一个程序中的操作,导致线性地址排列被打乱了....所以说是改变了元素值
在第二个程序中是保持数组地址不变的情况下,改变了它们的指向顺序
可能理解起来比较复杂...不过画个图就容易了....
某不想畫圖。。。
簡單點內說,指標也可作為元素的感覺吧。。
页:
[1]