C语言--指针与数组

1.数组的本质

  就是一片连续的内存;

2.一些事实

  -使用取地址操作符&获取数组的地址

  -数组名可看作一个指针,代表数组中0元素的地址

  -当指针指向数组元素时,可进行指针运算(指针移动)

  eg:int a[] = {1, 2, 3, 4, 5};

    int* p = a;//a<==>数组名<==>&a[0]

    p = p + 1;//指针操作

    printf("%p", p);//打印指针用%p

3.深入理解数组地址(int a[] = {1, 2, 3, 4, 5};)

  -&a与a在数值上相同,但是意义上不同

  -&a代表数组地址,类型为:int (*)[5];

  -a代表数组0号元素地址,类型为:int*

  -指向数组的指针:int*(pName)[5] = &a;

  eg:int a[5] = {1, 2, 3, 4, 5};

    int(*pa)[5] = &a;

    int * p = a;

    pa = p;//错误 类型不一致

注意:数组名并不是指针,只是代表了0号元素的地址,因此可以当作指针使用

4.指针与数组的等价用法

  a[i] <==>*(a + i)//a+i即数组中第i个元素的地址

     <==>*(p + i) <==>p[i] 

5.字符串

  C语言中,字符串常量时char*类型,一种指针类型

6.指针移动

  int v = *p++;

  --指针访问操作符(*)和自增运算符(++)优先级相同

  --所以,先从p指向的内存中取值,然后p进行移动

    --等价于:int v = *p;p++;

小结:数组名可看作一个指针,代表数组中0元素的地址

   &a与a在数值上相同,但是意义上不同

   C语言中字符串常量的类型时char*

   当指针指向数组元素时,才能进行指针运算

posted @ 2023-02-12 13:47  ys_nana  阅读(67)  评论(0)    收藏  举报