指针的指针在儿维数组传值的一个有关问题
指针的指针在儿维数组传值的一个问题
题目:用指针的指针实现字符串数组的排序
代码如下:
#include<stdio.h>
#include<string.h>
void sort(char **p)
{
char *temp;
for(int i=0;i<5;i++)
for(int j=i+1;j<5;j++)
if(strcmp(*(p+i),*(p+j)) > 0)//因为比较的是指针指向的字符串所以得用strcmp
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
void main()
{
char str[5][20],*pstr[5];
char **p;
p=pstr;
for(int j=0;j<5;j++)
pstr[j]=str[j];
printf("input 5 strings:\n");
for(int i=0;i<5;i++)
gets(pstr[i]);
sort(p);
printf("now the sequences sort:\n");
printf("--------********------:\n");
for(i=0;i<5;i++)
printf("\t%s\n",pstr[i]);//打印的时候不能用数组的str[i],为什么就不是之前的引用呢?
printf("--------********------:\n");
}
问题:为什么“红色字体注释行”的输出变量非得用pstr[i]而不能像普通指针传递的参数那样用str[i]输出?
谁能解释下是什么原因呀!
------解决方案--------------------
------解决方案--------------------
看来已经解释的差不多了。
if(strcmp(*(p+i),*(p+j)) > 0)//因为比较的是指针指向的字符串所以得用strcmp
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
这样交换的只是指针的值,可是作为参数传递的是指针的副本,当函数结束后就不存在了。所以对指针副本的操作就丢失了
------解决方案--------------------
题目:用指针的指针实现字符串数组的排序
代码如下:
#include<stdio.h>
#include<string.h>
void sort(char **p)
{
char *temp;
for(int i=0;i<5;i++)
for(int j=i+1;j<5;j++)
if(strcmp(*(p+i),*(p+j)) > 0)//因为比较的是指针指向的字符串所以得用strcmp
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
void main()
{
char str[5][20],*pstr[5];
char **p;
p=pstr;
for(int j=0;j<5;j++)
pstr[j]=str[j];
printf("input 5 strings:\n");
for(int i=0;i<5;i++)
gets(pstr[i]);
sort(p);
printf("now the sequences sort:\n");
printf("--------********------:\n");
for(i=0;i<5;i++)
printf("\t%s\n",pstr[i]);//打印的时候不能用数组的str[i],为什么就不是之前的引用呢?
printf("--------********------:\n");
}
问题:为什么“红色字体注释行”的输出变量非得用pstr[i]而不能像普通指针传递的参数那样用str[i]输出?
谁能解释下是什么原因呀!
------解决方案--------------------
------解决方案--------------------
看来已经解释的差不多了。
if(strcmp(*(p+i),*(p+j)) > 0)//因为比较的是指针指向的字符串所以得用strcmp
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
这样交换的只是指针的值,可是作为参数传递的是指针的副本,当函数结束后就不存在了。所以对指针副本的操作就丢失了
------解决方案--------------------