黑马程序员技术交流社区

标题: IOS基础第十一天(上) [打印本页]

作者: dushoupeng    时间: 2015-7-9 09:39
标题: IOS基础第十一天(上)
2. 在指针指向数组元素时,允许进行以下运算:
++=
--=
自加,
自减,
两个指针相减(只有p1p2都指向同一数组中的元素时才有意义)
int a[4]={1,2,3,4};
  int *p = a;  //数组指针,定义了一个指针变量p赋值数组的首地址(第一个元素的地址),p指向数组的第一个元素
     int *p = &a[0]; //等价上面一句话
   数组指针如何访问数组的元素:
     1p+1   表示指向数组的下一个元素
     2p-1   指向数组的上一个元素
注意:数组名a是一个常量,数组名 a是一个常量相当于 *(10++)这是错误的
       //printf(" *a++   =%d\n",*a++); //错误的
4. 指针数组:
       存放指针的数组,就是指针数组
  指针数组的定义:
  数据类型  * 数组名[数组长度];
       int *pa[3];
       //定义了一个指针数组,数组名是pa,可以用来存放3个指针(必须是int类型变量的指针)
  指针数组的使用:
       int a=3,b=4,c=5;
       int *pa[3]={&a,&b,&c};
       pa[0] a的地址
      pa  数组首地址,又是变量a的地址
5. 两个指针变量之间的运算
   1)两个指针之间的减法运算:两指针变量相减所得只差是两个指针所指数组元素之间相差的元素个数。
       10x0006  - 0x0003  =  3  (意义不大)
       2)常见的用法:两个指针都指向同一个数组
            i.判断两个指针变量指向的元素是否连续
            ii.判断两个指针变量之间相隔几个元素
地址差值(p1-p)*sizeof(int)
            int a[5]={1,2,3,4,5};
            int *p = a; //p指向了数组的第一个元素
            int *p1 = &a[3]; //p指向了数组的第四个元素
            注意:两个指针变量之间没有加法运算
如果两个指针变量指向同一个元素 那么他们相减的结果是 0
判断两个指针变量指向的元素是否相邻(连续),他们相减的结果是 1的绝对值
2)两个指针之间的关系运算
p1 > p
    //1    表示p1在高位
    //0    p在高位或者他们指向了同一个位置
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;
}


作者: hanjiaqi    时间: 2015-7-9 19:46
马上看到指针了~ 感觉好麻烦的样子
作者: 小蜗牛0519    时间: 2015-7-9 19:48
感觉指针好麻烦
作者: iOSNC    时间: 2015-7-10 18:30
感觉好难哦!
作者: 廖博伟    时间: 2015-7-10 18:41
加油。。。。。。。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2