08指针和数组、指针运算、指针数组

阿里云教程3个月前发布
17 0 0

void fun1_les7() {
    int a[5];
    a[3] = 50;
    int* p;
    p = a;
    printf("%d
", p[3]);
}

c语言规定,数组的名字就是数组的首地址,即第0个元素的地址;是个常量;
p是指针变量,a是常量,a可以赋值给p,p不能赋值给a;

    *(p + 2) = 100;
    printf("%d
", a[2]);

p是数组第0个元素的地址,p+2就是a[2]的元素的地址;

    *(a + 1) = 150;
    printf("%d
", a[1]);

指针运算

指针运算只有在指针指向数组元素的时候才有意义
数组名+索引取数组值

    printf("%p
", p);
    printf("%p
", p+2);        //相差8个字节

    char str[5];
    char* p1;
    p1 = str;
    printf("%p
", p1);
    printf("%p
", p1 + 2);     //相差2个字节

指针+1,指针往后移动一个对应类型的变量,地址编号加几个数取决于指针的类型,整型加4个字节,字符型加1个字节;

只有两个一样类型的指针,指向同一个数组的时候,指针的大小比较才有意义,同理他们之间的减法才有意义;
指向前面元素的指针小于指向后面元素的指针
指针相减的结果是中间隔了多少个元素

两个一样类型的指针可以相互赋值
void *类型除外

    int b[10];
    int *p3 = &b[4];
    int* p4 = &b[8];
    //int* p3, * p4;
    //p3 = &b[4];
    //p4 = &b[8];
    printf("%d
", p4-p3);

指针数组

指针数组本身是个数组,是若干个一样类型的指针变量构成的数组
指针数组是个数组,数组里面的每个元素是一个指针
定义 :类型 * 变量名 [数组数量]

    int * p[5];

    int a=88;
    p[1] = &a;
    int b[10] = {1,2,3,4,5,6,7,8,9,10};
    p[2] = &b[2];

    printf("%d---%d
", *p[1], *p[2]);

© 版权声明

相关文章

暂无评论

none
暂无评论...