以下代码声明了一个int
数组,并显示该数组在内存中的位置。
#include <stdio.h>
int main()
{
int array[5] = { 2, 3, 5, 7, 11 };
printf("'&array' 的地址是 %p\n", &array);
printf("'array' 的地址是 %p\n", array);
system("pause");
return(0);
}
执行上面示例代码,得到以下结果:
'&array' 的地址是 012FFD68
'array' 的地址是 012FFD68
&
对其它变量很重要。但对于数组,它是可选的。那么增加指针会发生什么?
my_pointer++;
存储在指针变量中的地址递增一个单位,而不是一个数字。
什么是单位?
它取决于变量类型。如果指针是char
类型指针,那么新地址的确可能是0x8001
。
但是如果my_pointer
是int
或float
类型,则新地址将类似于:
0x8000 + sizeof(int)
// 或
0x8000 + sizeof(float)
在大多数系统中,int
是4
个字节,因此可以猜测在增量操作之后my_pointer
将等于0x8004
。
#include <stdio.h>
int main()
{
int numbers[10];
int x;
int *pn;
pn = numbers; /* 初始化指针 */
/* Fill array */
for (x = 0; x < 10; x++)
{
*pn = x + 1;
pn++;
}
/* 显数数组 */
for (x = 0; x < 10; x++)
printf("numbers[%d] = %d\n", x + 1, numbers[x]);
system("pause");
return(0);
}
执行上面示例代码,得到以下结果:
numbers[1] = 1
numbers[2] = 2
numbers[3] = 3
numbers[4] = 4
numbers[5] = 5
numbers[6] = 6
numbers[7] = 7
numbers[8] = 8
numbers[9] = 9
numbers[10] = 10