分享

C: 数组和指针

 豫龙晏子 2017-02-07
  • 当一个指针指向一个数组的某个元素时,那么p+i为指向此元素后第i个元素的指针,p-i为指向此元素前第i个元素的指针,以下举例说明:

#include

int main(void)

{

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

int *p;

p = a;

printf('*(p+2) = %d\n', *(p + 2));

p = &a[5];

printf('*(p-2) = %d\n', *(p - 2));

}C: 数组和指针

  • 指针运算符和下标运算符

通过程序理解a[i], *(a+i), p[i],*(p+i)的区别,a[i]表示的是数组中的第i个元素,*(a+i)指的是相对于

数组首元素首地址偏移i*sizeof(a[0])个地址内存中的内容,即为a[i]; p[i]表示的是指针p指向的数

组中偏移i*sizeof(a[0])的地址中的元素,即p[i] = a[i] = *(p+i)

/*指针与数组*/

#include

int main(void)

{

char i;

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

int *p = a;

//a[i], *(a+i), p[i],*(p+i)的区别

for (i = 0; i < 5;="">

{

printf('a[%d] = %d *(a+%d) = %d p[%d] = %d *(p+%d) = %d\n', i, a[i], i, *(a+i), i, p[i], i, *

(p+i));

}

for (i = 0; i < 5;="">

{

printf('&a[%d] = %p a+%d = %p &p[%d] = %p p+%d = %p\n', i, &a[i], i, a + i, i, &p[i], i, (p +

i));

}

return 0;

}

C: 数组和指针

  • 指针指向的内容之间可以进行加减法

  • 指针指向的地址之间不能进行加法(如下图编译器报错),但是当两个指针都指向同一个数组中的元素时,指针地址之间可以进行减法

C: 数组和指针

  • 程序实例如下:

    猜猜如下程序的输出结果:

/*指针之间能否进行加减法*/

#include

int main(void)

{

char i;

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

int *p1 = &a[0];

int *p2 = &a[1];

/*指针指向的内容加法*/

printf('*p1 + *p2 = %d\n', (*p1 + *p2));

printf('p1 = %p\n', p1);

printf('p2 = %p\n', p2);

/*指针指向的地址加法*/

//printf('p1 + p2 = %p\n', (p1 + p2));

/*指针指向的内容减法*/

printf('*p2 - *p1 = %d\n', (*p2 - *p1));

/*指针指向的地址减法*/

printf('p2 - p1 = %p\n', (p2 - p1));

return 0;

}

输出结果如下图:想一想p2 - p1的结果为何是1?

C: 数组和指针

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多