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));
}
通过程序理解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;
}
/*指针之间能否进行加减法*/
#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?