读书人

关于指针和地址解决思路

发布时间: 2013-10-21 17:02:52 作者: rapoo

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


#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)定义什么类型,返回什么,取决于你的目的。
你必须清楚,他们之间的区别,各自的用法。

读书人网 >C++

热点推荐