C语言(八)

拼搏现实的明天。 2022-12-13 12:53 214阅读 0赞

指针跟二维数组之间的关系

==========================

  1. 熟练掌握二维数组跟指针有关的几种写法

    例子1:int类型的二维数组

    1. int a\[5\]\[6\]=\{78,96,741,5,12,74\};
    2. 哪些是指针,如果是指针,请问是什么类型的指针?哪些不是
    3. a a+1 是指针,表示该数组首元素(a\[0\])的地址&a\[0\],加了24个字节
    4. a的类型是: int (\*)\[6\]; 数组指针
    5. &a &a+1 是指针,数组名前面加上&表示指向整个数组的一个指针
    6. 整个数组 int \[5\]\[6\]这种类型
    7. &a的类型是:int (\*)\[5\]\[6\]
    8. a\[0\] a\[0\]+1 是指针,把二维数组当成特殊的一维数组看待,a\[0\]就是第一个成员的名字,第一个成员就是int\[6\],数组名出现在表达式表示该数组(int\[6\])首元素的地址
    9. a\[0\]的类型是: 等价于&a\[0\]\[0\] int \*
    10. &a\[0\] &a\[0\]+1 是指针
    11. &a\[0\]的类型是: int (\*)\[6\]; 数组指针
    12. a\[0\]\[1\] a\[0\]\[1\]+1 不是指针
    13. &a\[0\]\[1\] &a\[0\]\[1\]+1 是指针, int \*

    例子2:char类型的二维数组

    1. char b\[5\]\[10\];

练习:

  1. 1. 自行验证char类型的二维数组,规律跟彭老师总结是不是一样的??
  2. 肯定是一样
  3. 2. char b\[5\]\[10\]=\{"hello", ''world", "gechehe","china"\};
  4. //思路: b理解成5个 char \[10\]
  5. //用字符c替换world中字符r
  6. \*(b\[1\]+2)='c'; // b\[1\]是指针--》什么类型char \* 等价于 &b\[1\]\[0\]
  7. //p是数组指针
  8. char (\*p)\[10\]=&b\[2\]; // b\[2\]数组名,&b\[2\]是个数组指针
  9. // p指向china
  10. p++;
  11. printf("p is:%s\\n",(char \*)p); // %s要求打印字符串,必须是char \*类型
  12. printf("b\[1\] is:%s\\n",b\[1\]);

答疑:

  1. 问题一: \*(b\[1\]+2)='c' b\[1\]+2='c',有啥区别?
  2. b\[1\]+2='c' 语法错误
  3. 左边等价于 &b\[1\]\[0\]+2 -->是个指针

作业:

  1. 1. 定义一个char类型的二维数组char buf\[6\]\[20\],要求使用指针操作去除掉字符串中所有的非英文字母(只要不是英文字母的全部剔除)
  2. 思路有两种:第一种采用char \*指针去访问这个二维数组
  3. 第二种采用数组指针 char (\*p)\[20\] p\[i\]\[j\]
  4. 2. 定义一个char类型的二维数组char name\[5\]\[20\],你从键盘输入5个字符串表示5个人的名字,编程实现用指针判断5个名字中是否包含了英文大小写以及数字,并且每个人的名字长度不能超过8个字符(人的名字要求:小写字母,大写字母,数字字符三种都要包含),如果名字符合要求就打印出来,不符合就打印缺少了那种字符(缺少了小写?大写?英文?printf打印提示即可)
  5. 思路:用指针去遍历字符串,标记字符的类型(大写,小写,数字字符)
  6. 定义三个int类型的变量去标记
  7. int flag1=0; // 1 大写 0 非大写
  8. int flag2=0; 1 小写 0 非小写
  9. int flag3=0; 1 数字字符 0 非数字字符

hfdhskfhE86 //只要有一个字符不符合三种类型要求,直接退出循环

发表评论

表情:
评论列表 (有 0 条评论,214人围观)

还没有评论,来说两句吧...

相关阅读

    相关 皇后问题-C语言

    八皇后问题-C语言 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任

    相关 C语言开发总结(十

    [优秀程序员不得不知道的20个位运算技巧][20] 一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您

    相关 c语言次作业

    1. /\选择法排序。输入一个正整数n(1<n<=10),再输入n个 整数,将他们从大到小排序后输出。试编写相应程序。\/ \include<stdio.h> i