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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laotang013 中级黑马   /  2015-10-21 00:03  /  557 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*指针与数组的特点*/

#include <stdio.h>

int main(){

    /*

     2.指针可以运算.但仅限于加减运算.运算的实质就是地址运算.即地址的移动.

    int arr[3]={1,2,3};
    int *p=arr;//int *p=&arr[0]
    int a=*p;
    //a=*(p+1);//等效于:int *p1=&arr[1]; a=*p1;

    int *p1=&arr[1];
    a=*(p1+1);//p1的值并没有改变.
    printf("p1=%p\n",p1);

    p1=p1+1;//赋值之后才改变了
    printf("p1=%p\n",p1);
    a=*(p1-1);

    printf("%d\n",a);

     */

    /*

     3.地址(+1)向高位移动,而(-1)向低位移动.
     不同指针类型移动一位(+1或-1)的字节数不同.
     4.实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节.



    char arr[3]={'a','b','c'};
    char *c=&arr[1];//char *c=arr;

     //printf("c=%p\n",c);
     //printf("%c\n",*c);
     //c=c+1;
     //c=c-1;
     //printf("c=%p\n",c);
     //printf("%c\n",*c);
    //\*(c+1)等效于:c[1+1]

    //(*注意)仅当指针c为第一个元素指针时可以与arr互换.
     printf("%c\n",arr[3]);//数组越界会有警告
     printf("%c\n",c[2]);//指针只管移动,不管是否越界

    */

    /*指针的运算移动时,只在在内存区域内不受限制*/

    int b=2;
    int a=0;
    int *p=&a;
    printf("%d\n",*p);
    p=p+1;
    printf("%d\n",*p);


}





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马