数组的行地址、列地址和指针的应用

rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1.CHI%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C10%5Cclip_filelist.xml">

数组和指针的那点关系

 

      1、数组的各种表示:

对二维数组  int  a[3][4],

a-----二维数组的首地址,即第0行的首地址

a+i-----i行的首地址

a[i] <=> *(a+i)------i行第0列的元素地址

a[i]+j <=> *(a+i)+j -----i行第j列的元素地址

*(a[i]+j) <=> *(*(a+i)+j) Û a[i][j]

a+i=&a[i]=a[i]=*(a+i) =&a[i][0], 值相等,含义不同

a+i <=> &a[i],表示第i行首地址,指向行

a[i] <=> *(a+i) Û &a[i][0],表示第i行第0列元素地址,指向列

 

2、名词解释:

Int *p[n]  n个指向整型数据的指针变量组成的指针数组P,即这个数组中存放的都是指针;

Int (*p)[n]  p为指向含有n个元素的一维整型数组的指针变量,即数组指针;

如:char (*ptr)[2];//定义一个含有2个元素的一维char数组的指针变量

     ptr = new char[n][2];//声明nchar类型的一维数组(这个数组中有2个元素),其中n为可变,也可不添;

程序举例:
char (*ptr)[2];//

ptr = new char[][2];

 

ptr[0][0] = 'a';

ptr[0][1] = 'b';

 

ptr[1][0] = 'c';

ptr[1][1] = 'd';

 

 

char *s = ptr[1];

 

cout << *s << endl;

 

s++;

 

cout << *s << endl;

 

int *p() P为返回指针的函数,该指针指向一个整型数据,易理解不必多说;

int (*p)()P为指向函数的指针变量,该函数返回整型数据,一看例子便明了了:

int f1()

{

   printf("this is f1 /n");

   return 0;

}

int f2()

{

   printf("this is f2 /n");

   eturn 0;

}

int f3()

{

   printf("this is f3 /n");

   return 0;

}

 

typedef int (*pFunc)();

pFunc func[3] = {f1,f2,f3};

 

int main()

{

  while (1)

  {

     printf("please input a number between 1 to 3 /n");

 

     int n = 0;

     scanf("%d",&n);

 

     if(n >= 1 && n <=3)

     {

          func[n-1]();

     }

     else

     {

          printf("wrong number !/n");

          continue;

     }

  }

  return 0;

}

int **pP为指针变量,它指向一个指向整型数据的指针变量,即双指针或二级指针;



   3、二级指针与指针数组的关系


int  **p     int  *q[10]         

  指针数组名是二级指针常量

        p=q;   p+i q[i]的地址

        指针数组作形参,int  *q[ ]int **q完全等价;但作为变量定义两者不同

        系统只给p分配能保存一个指针值的内存区;而给q分配10块内存区,每块可保存一个指针值

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值