指针与数组

 

字符指针数组运用

// 实现对字符指针数组排序

#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)

{

 forint 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)

{

 forint 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值