1.什么是指针
根本上讲,指针的值是一个内存地址,是一个变量。
int main(void)
{
unsigned char a = 10;
unsigned char *p = NULL; //定义一个指向无符号字符型的空指针
p = &a; //将a的地址赋值给指针p
printf("*p=%d\n",*p); //打印,指针指向a地址的内容
printf("p=%d\n",p); //打印,a的地址
}
运行结果:
运算符&、*
&:地址运算符。
*
间接运算符。
2.数组与指针
数组:相同数据类型数据的集合。例如:
int arr[] = {1,3,5,7,9};
定义数组时需要给出数组名和数组长度,且数组名是数组首元素的地址。
那么数组是该怎么以指针的方式操作呢?
看下面代码:
# define SIZE 4
int main(void)
{
short dates[SIZE];
short *pti;
short index;
double bills[SIZE];
double *ptf;
pti = dates; //把数组地址赋给指针pti
ptf = bills; //把bills数组地址赋值给指针ptf
printf("%23s %15s\n","short","double");
for(index = 0; index<SIZE;index++)
printf("pointer(指针)+%d: %10p %10p\n",index, pti+index, ptf+index);
return 0;
}
如上运行结果:
当数组指针地址每+1时,short数组地址+2,double+8。
而short类型数据占2个字节,double占8个字节。 在C中, 指针加1指的是增加一个存储单元。 对数组而言, 这意味着把加1后的地址是下一个元素的地址。
那么下列等式成立。
dates + 2 == &date[2] // 相同的地址
*(dates + 2) == dates[2] // 相同的值
`