指向一维数组的指针和指向一维数组元素的指针有什么区别,为什么指向数组的指针变量的增值是以一维数组的长度为单位的。
http://c.biancheng.net/cpp/html/1927.html
主要是因为两者步长不一样;如下代码:
#include<stdio.h>
#include<stdlib.h>
void display(int *p,int len)
{
for (int i = 0;i<len;++i)
{
printf("p[%d] = %d\n", i, p[i]);
}
putchar('\n');
}
void func(int(*p)[3], int len)
{
for (int i = 0;i<len;++i)
{
printf("%d ", *(p[0]) + i);
}
}
int main(int argc, char **argv)
{
//一维数组
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//二维数组
int buf[][3] = { {1,2,3},
{4,5,6},
{7,8,9} };
int blen = sizeof(buf) / sizeof(int);
int len = sizeof(arr) / sizeof(int);
printf("blen = %d\n", blen);
puts("-----------");
display(arr, len);
printf("len = %d\n", len);
puts("-----------");
func(buf, blen);
system("pause");
return 0;
}
你这想就对了,假如指针指向int数组,那么指针加1是不是,就移动4B,同样的,指向数组时,加1就移动一个数组的长度。
指向一维数组的指针,取的是整个数组的地址,它加一代表着你这个数组的地址向后加一,而这个数组在内存中申请的是一片连续的内存单元,所以会直接指向数组末尾的下一个内存空间的地址。指向数组元素的指针取的是这个数组元素的地址,而数组中存放的是相同类型的多组数据,所以加一是指向这个元素的下一个元素,你可以当做是数组下标向后移动一位(数组名就是一个地址,数组的每个元素都有地址指向)