前言
有时我们在编程序的时候,在某种情况下,操作指针和数组时,会让人感到它们是一样的,即使,它们可以互换使用。下面咱们一块来来总结一下指针与数组的相同点和不同点。
int main()
{
int a[]={1,2,3,4,5,6};
int *p =a;
int i=0;
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d ",a[i]);
}
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
printf("%d ",p[i]);
}
return 0;
}
概念区别:
指针 | 数组 |
---|
保存数据地址 | 保存数据 |
间接访问数据,首先取得指针的内容,把它作为地址,然后从这个地址提取数据。如果指针有一个下表[I],就是把指针内容加1作为地址,从中提取数据 | 直接访问数据,a[I]只是简单地以a-I作为地址取得数据 |
通常用于动态数据结构 | 通常用于存储固定数目且数据类型相同的元素 |
相关函数malloc() ,free() | 隐式分配和删除 |
通常指向匿名数据 | 自身即为数据名 |
指针与数组什么时候相同
1、表达式中的数组名(与声明不同)被编译器当作一个指向该数组第一个元素的指针。
2、下标总是与指针的偏移量相同。
3、在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。
本人参考的是《C专家编程》这本书,原理性地探讨C语言中的知识。
