码迷,mamicode.com
首页 > 编程语言 > 详细

指针与一维数组和二维数组以及字符串指针数组的学习笔记

时间:2017-05-10 17:48:38      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:char   turn   方法   优先级   add   return   字符串   应该   个人   

废话不多少,直接上代码,关键的东西已经注释了,看注释信息理解即可。

说明:本程序讨论了一维数组和指针的关系,谈论了二维数组和指针之间的关系,讨论了字符串数组指针数组和指针之间的关系,代码中以给出定义的方法和简单的使用,但是有些使用方法并没有列出,如果需要,

请自行加入printf调试即可。

转贴请注明出处,欢迎和我讨论,谢谢。

               ----------cofin_add

 

#include <stdio.h>

void fun(int m, char *((*p)[m]))
{
  int i = 0;
  char ** buf = (char **)p;
  for(i=0;i<m;i++)
  {
    printf("%s\t", *(buf+i));
  }
  printf("\n");
}

void fun1(int m, char **buf)
{
  int i = 0;
  for(i=0;i<m;i++)
  {
    printf("%s\t", *(buf+i));
  }
  printf("\n");
}

int main(void)
{
  char *buf[] = {"aa", "bb", "cc", "dd", "ee", "ff"}; //指针数组,其中的每一个变量(指针),指向第一个字符串的首地址。
  char **pa = buf; //如何指向数组中的元素呢,因为其中的每一个元素都是指针,所以应该用二重指针指向它。
  char **px = &buf[0]; //数组名就是数组元素的首地址,可以看到和上面是一样的。
  char *(*pb)[6] = &buf; //如何指向指针数组本身?因为数组其中共有六个变量(有6个指针或者指针变量(地址)),故应该用数组指针来指向它,
  //但是由于其中的变量是指针,所以应该在加一个*,纯属个人猜测,如果这个成立的话,也可以解释上面的为什么是用二重指针了,因为buf和&buf[0]等价
  //也就是说,其实&buf[0] 是地址的地址(因为buf[0]本身存储的就是地址),应该用二重指针指向。

  //一维数组再研究
  int a[5] = {0}; //定义数组,有5个int型的变量
  int *p1 = a; //定义指针指向数组中的元素
  int (*p2)[5] = &a; //若是要指向这个数组本身,则需要用数组指针指向它,注意要加括号,[]比*优先级高。

  //二维数组的指针研究
  int aa[2][5] = {0};
  int (*p3)[5] = aa; //指向二维数组中的元素,二维数组中的元素就是一维数组,参考指向一维数组的方法即可
  int (*p4)[5] = &aa[0]; //和上面一样,数组的名字就是数组的首元素的地址,其实是一个地址,也就是一维数组的数组地址。
  int *p5 = &aa[0][0]; //指向二维数组首元素(一维)的首地址,用int *p,类型刚好匹配
  int (*p6)[2][5] = &aa; //指向二维数组本身的指针。总结:把定义中的数组名字换成指针,加()即可。

  char *p = buf[1]; //buf[0] => 里面存的指针数组中的是第一个元素的地址,也就是直接把一个地址给他初始化

  printf("buf[1] = 0x%x.\n", buf[1]);

  printf("sizeof(buf[1]) = %d.\n", sizeof(buf[1]));
  printf("buf[1] = 0x%x.\n", buf[1]);
  printf("sizeof(buf) = %d.\n", sizeof(buf));

  fun(sizeof(buf)/sizeof(buf[0]), &buf); //这里传的是数组指针的地址,类型推倒:原来是一个指针数组,char *pt[x],如果是
  //普通数组的话,char a[x],若指向该数组本身则应该写作 char (*p)[x] = &a; 根据这一点,类比到指针数组也就是 :char *(*p)[x] = &pt;

  fun1(sizeof(buf)/sizeof(buf[0]), buf); //同理
  return 0;
}

 运行结果:

技术分享

 

指针与一维数组和二维数组以及字符串指针数组的学习笔记

标签:char   turn   方法   优先级   add   return   字符串   应该   个人   

原文地址:http://www.cnblogs.com/cofin/p/6837054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!