标题:C语言指针数组名做实参的一个问题, 有点基础的麻烦进来帮小弟解决一下,感 ...
只看楼主
gg0013
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2012-11-26
结帖率:100%
 问题点数:0 回复次数:1 
C语言指针数组名做实参的一个问题, 有点基础的麻烦进来帮小弟解决一下,感激不尽啊
#include<stdio.h>
#include<string.h>

void mymin(char **w,int n);

main()
{
  char *p[4];
  int i=0;

  p[0]="ab";
  p[1]="a";
  p[2]="abc";
  p[3]="abcd";

  printf("before:\n");
  for(i=0;i<4;i++)
   printf("p[%d]->%s\n",i,p[i]);
  printf("\n");
  mymin(p,4);
  printf("after:\n");
  for(i=0;i<4;i++)
   printf("p[%d]->%s\n",i,p[i]);
  printf("\n");
}

void mymin(char **w,int n)
{
  int i=0,k=0;
  char *temp;
  
  for(i=0;i<n;i++)
   if(strcmp(w[i],w[k])<0) k=i;
   temp=w[0];w[0]=w[k];w[k]=temp;}



关于**w,我想的是, 在mymin函数中,**w是指向p[]的对吧, 当它w[0]与w[1]交换指向后, 应该是说,w[0]->p[1]  ,w[1]->p[0];它改变了w的指向, 但不影响到p的指向,p[0]照样指向“ab”   ,p[1]->"a",相当于w[0]->p[1]->"a", w[1]->p[0]->"ab",p[0]仍然是"ab", 但后面main函数中按p[i]来输出,那应该是没有改变啊?
搜索更多相关主题的帖子: void include before C语言 
2013-05-11 15:57
gg0013
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2012-11-26
得分:0 
好的 , 刚刚想明白了 , *w ->p的,w[i]改变的是指针P中的地址,是w[0]与w[1]交换后 让p[0]与p[1]中的地址交换了,所以p[0]就指向原来p[1]的地方了
2013-05-11 16:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-406823-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052976 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved