A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dushoupeng 中级黑马   /  2015-7-10 09:30  /  1183 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文




6. 数组名访问二维数组

#include <stdio.h>


int main(int argc, const char *argv[]) {

   

   int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

   

   //列指针

   //a[0] == &[0][0] a[0]+1==&a[0][1]  a[0]+2==&a[0][2]

   printf("&a[0][1] = %p\n",&a[0][1]);

   printf("a[0]+1   =%p\n",a[0]+1);

   printf("*(a[0]+1)   =%d\n",*(a[0]+1));  //3

   

   

   printf("&a[0][2] = %p\n",&a[0][2]);

   printf("a[0]+2   =%p\n",a[0]+2);

   

   //行指针  a[0]  a[1] a[2]

   //a+1    //第二行的首地址

   //a+2    //第三行的首地址

    printf("a[1]   =%p\n",a[1]);

    printf("a+1   =%p\n",a+1);

   

    printf("a[2]   =%p\n",a[2]);

    printf("a+2   =%p\n",a+2);

   

    // a+1 第二行第一个元素的地址

    //*(a+1)  == &a[1][0]

   

   printf("*(a+1) = %p\n",*(a+1));

   printf("&a[1][0] = %p\n",&a[1][0]);

   

   

   //a+j     获取的&a[j]

   //*(a+j)  获取 a[j]

   //a      *(a+i)

   //*(*(a+i)+j); ----->  a[j]

   for (int i=0; i<3; i++) {

        for (int j=0; j<4; j++) {

            //a    *(a+i)

           //printf("%d\t",*(a+j));

           printf("%d\t",*(*(a+i)+j));

        }

        

        printf("\n");

   }

   

   return 0;

}

7. 数组指针:

   定义一个指针变量,让这个指针变量指向一维数组的元素

二维数组指针

  行指针,用来指向二维数组的每一行,存放的是行的首地址

    定义格式:  数据类型  (*行指针变量名)[数组第二维的长度];  

二维数组指针的初始化

  int a[2][3];

  int b[2][2];

  float f1[4][4];

  //假设我要定义一个指向数组a的一个行指针

  // a  = &a[0]  = &a[0][0]  = a[0]

  int (*p)[3] = a;

二维数组指针的使用

*(*(p+i)+j)  //就是获取二维数组的每个元素

8.指针数组和二维数组指针变量的区别:

二维数组指针变量是单个变量,其一般形式中*指针变量名)两边的括号不可少。而指针数组类型表示的是多个指针(一组有序指针)在一般形式中“*指针数组名两边不能有括号。例如:

Int*p[3]

表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3.

Int *p[3]

表示p是一个指针数组,有三个下标变量p[0], p[1], p[2],均为指针变量

9. 字符串指针:

        定义: char *字符串指针变量名 ="字符串内容";

       用作:用来保存一个字符串

       注意:1)字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的,只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。

2)使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所以我们可以改变里面的字符当把一个字符串常量赋值给一个字符数组的时候,那么它会把字符串常量中的没有字符都放在字符数组里

3)使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符

10.二维字符串数组:

    一维字符数组

       char ch[10]={'a','b'};

       char ch1[]="abc";

   二维字符数组

       char ch2[3][10]={{'a','b'},{'b'},{'c'}};

   用二维数组来保存多个字符串

      //用二维的字符数组可以存储多个字符串

       //第一维存的是每个字符串的首地址

       //每个字符串的长度,不能超过第二维长度

       charch3[3][5]={"abc","def","kkkk"}

           a b  c  \0  \0

           d e  f  \0  \0

           k k  k  k   \0

          ch[1][3] = 'Z';

11. #include <stdio.h>

int main(int argc, const char *argv[]) {

   //char 类型的指针数组

   char*name[3]={"abcdasfadsfasdfasdfasdf","def","kkk"}

   for (int i=0; i<3; i++) {

        //name

        printf("%s\n",*(name+i));

   }

   //字符串指针和字符数组的区别

   //字符串指针:

                      char *ss ="abc";

   //指向可以改变

   //ss是一个指针变量

                      ss ="helloWorld!";

   //字符数组:

                      chars1[]="abc";

   //s1是数组名,是一个常量,不能被复制

                      //s1 ="helloworld!";

   return 0;

}

6 个回复

倒序浏览
刚刚学到了指针 感觉有点复杂
回复 使用道具 举报
学习学习!
回复 使用道具 举报
一起加油一起努力!~
回复 使用道具 举报
哎  我c基础自学都非常不好感觉
回复 使用道具 举报
好学吗?我在学习Android方面的。。。
回复 使用道具 举报
加油。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马