字符指针数组运用
// 实现对字符指针数组排序
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
char * bookname[]={ "cpp primer","effective cpp","windows programe","effective stl"};
int main()
{
void printarr(char * bkname[], int n);
void sortarr(char * bkname[], int n);
printarr( bookname, 4);
sortarr( bookname, 4 );
printarr( bookname, 4);
return 0;
}
void printarr(char * bkname[], int n)
{
for( int i=0; i<n; i++ )
{
cout << bkname[i] << endl;
}
}
void sortarr(char * bkname[], int n)
{
for(int i=0; i<n-1; i++)
{
/* 原理
if(bkname[i]>bkname[i+1])
{
temp = bkname[i];
bkname[i] = bkname[i+1];
bkname[i+1] = temp;
}
*/
char * pf = bkname[i];
char * pb = bkname[i+1];
while( *pf != '/0' && *pb!='/0')
{
if( *pf< *pb)
{ break;}
if( *pf> *pb )
{
char * temp = bkname[i+1];
bkname[i+1] = bkname[i];
bkname[i] = temp;
break;
}
++pf;
++pb;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二级指针:指针的指针,即指针的数据类型是指针
例char **p相当于 (char *) (*p) .翻译一下,指针p指向了一个char * 类型的数据,而char * 又是一个字符指针.
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
char * bookname[]={ "cpp primer","effective cpp","windows programe","effective stl"};
int main()
{
void printarr(char * bkname[], int n);
char **p = bookname; // 二级指针就相当于一个指针数据名
printarr( p, 4);
return 0;
}
void printarr(char * bkname[], int n)
{
for( int i=0; i<n; i++ )
{
cout << bkname[i] << endl;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
改错:
#include
int main(void) {
int **p;
int arr[100];
p = &arr;
return 0;
}
解答:
搞错了,是指针类型不同,
int **p; //二级指针
&arr; //得到的是指向第一维为100的数组的指针
#include
int main(void) {
int **p, *q;
int arr[100];
q = arr;
p = &q;
return 0;
}
//////////////////////////////////////////////////////////////////
翻转数组
#include <iostream>
using namespace std;
void reverse(char str[] ,int len);
int main()
{
char charr[5]={'h','e','l','l','o'};
reverse(charr,5);
for( int i=0; i<5;i++)
cout << charr[i];
return 0;
}
void reverse(char str[] ,int len)
{
int n = len/2;
--len;
for(int i= 0; i <n; i++)
{
char temp = str[i];
str[i] = str[len];
str[len] = temp;
--len;
}
}
//////////////////////////////////////////////////////////////////
得到内存
#include <iostream>
#include <string>
using namespace std;
void GetMemory( char ** p);
void GetMemory2(char * & p);
int main()
{
char *p;
GetMemory(&p);
p[0] = 'h';
p[1] = 'e';
p[2] = '/0';
char * p2;
GetMemory2(p2);
p2[0]='v';
p2[1]='l';
p2[2]='i';
p2[3]='s';
p2[4]='a';
p2[5]='/0';
cout << p << endl;
cout << p2 << endl;
return 0;
}
void GetMemory( char ** p)
{
*p = new char[10];
}
void GetMemory2(char * & p)
{
p = new char[10];
}
///////////////////////////////////////////////////////////
// 与二维数组等价的指针
#include <iostream>
using namespace std;
int main()
{
int w[3][4];
for( int i=0; i<3;i++)
for( int j=0; j<4;j++)
w[i][j] = i+j;
//数组的一维必须先确定
int (*p)[4]; // p不是二级指针,p是一个指向int [4]的指针
p = w;
for( int i=0; i<3;i++)
for( int j=0; j<4;j++)
cout << p[i][j] << endl;
}