首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于指针和地址解决思路

2013-10-21 
关于指针和地址写了个程序,出现了些不懂的问题。求教#includeiostream#includestring#includecstring

关于指针和地址
写了个程序,出现了些不懂的问题。求教


#include<iostream>
#include<string>
#include<cstring>
using namespace std;
template<class T>T maxn(T a[],int);
template<> char* maxn<>(char* a[],int);

int main()
{
  int a[6]={1,2,3,4,5,6};
  double b[4]={1.2,1.3,1.4,1.5};
  char *p[5]={"tan tao","ning yong","C luo","ling dao","xing hai nan"};
  char *d;
  cout<<maxn(a,6)<<endl;
  cout<<maxn(b,4)<<endl;
  for(int i=0;i<5;i++)
    {
      cout<<&p[i]<<endl;
    }
  d=maxn(p,5);
  cout<<&d<<endl;
  return 0;
}

template<class T>T maxn(T a[],int b)
{
  T n;
  for(int i=0;i<b-1;i++)
    n=a[i]>a[i+1]?a[i]:a[i+1];
  return n;
}

template<>char* maxn<>(char* a[],int b)
{
  int n;
  for(int i=0;i<b-1;i++)
    {
     n=strlen(a[i])>strlen(a[i+1])?i:i+1;
    }
  return a[n];
}

得到的指针d的地址和P【4】的地址不同,我该如何得到这个char指针数组中最长的字符串的地址呢?
[解决办法]

// test003.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<string>
#include<cstring>
using namespace std;


template<class T>T maxn(T a[],int x)
{
  T n;
  for(int i=0;i<x-1;i++)
    n=a[i]>a[i+1]?a[i]:a[i+1];
  return n;
}

template<>char* maxn<>(char* a[],int b)
{
  int n;
  for(int i=0;i<b-1;i++)
    {
     n=strlen(a[i])>strlen(a[i+1])?i:i+1;
    }
  cout<<&a[n]<<endl;
  return a[n];
}
 
int main()
{
  int a[6]={1,2,3,4,5,6};
  double b[4]={1.2,1.3,1.4,1.5};
  char *p[5]={"tan tao","ning yong","C luo","ling dao","xing hai nan"};
  char *d;
  cout<<maxn(a,6)<<endl;
  cout<<maxn(b,4)<<endl;
  for(int i=0;i<5;i++)
    {
      cout<<&p[i]<<endl;
    }
d=maxn(p,5);
  
  return 0;
}
 

[解决办法]
仅供参考

#include <stdio.h>
#include <string.h>


char* maxinarea(char *p[], int b)
{
int i;
int max = -1;
char *s = p[0];
for (i = 0; i<b; i++)
{
if ((int)strlen(p[i]) > max)
{
max = strlen(p[i]);
s = p[i];
}
}
return s;
}

int main()
{
int i;
char *p[5]={"tan tao","ning yong","C luo","hello world, how are you???","xing hai nan"};
for(i=0;i<5;i++)
    {
      printf("%p\n",p[i]);
    }
printf("指针数组中最长的字符串的地址是:%p\n", maxinarea(p,5));
printf("该字符串是:%s\n",maxinarea(p,5));

  return 0;
}

[解决办法]
1)&d=maxn(p,5)这是不可能的,变量的地址是不可以改变的
1.1)定义和返回指针的引用。只有C++可用。
char *&d =maxn(p,5);
//可以
  return a[n];
 
不过d只能这样用一次,并且必须是初始化的时候,d必须初始化。
1.2)定义和指针的指针,返回指针的地址。
char **d =maxn(p,5);//得到指针的地址。d可以多次使用,每次都可以这样用。
return &a[n];   //返回地址。

1.3)定义指针,返回指针。
char *d =maxn(p,5);
  //不可能得到 p[n]的地址,得到的字符串指针就是指针p[n],是字符串的地址,&d 是指针变量的地址
return a[n];

2)定义什么类型,返回什么,取决于你的目的。
  你必须清楚,他们之间的区别,各自的用法。

热点排行