C语言中的指针的问题。

指向一维数组的指针和指向一维数组元素的指针有什么区别,为什么指向数组的指针变量的增值是以一维数组的长度为单位的。

c

4个回答

主要是因为两者步长不一样;如下代码:

 #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;
}
lixiaogang_theanswer
此处不归牛顿管 回复cjws555:若有帮助,恳请采纳!~~~^ - ^
2 年多之前 回复
cjws555
cjws555 受教了23333
2 年多之前 回复

你这想就对了,假如指针指向int数组,那么指针加1是不是,就移动4B,同样的,指向数组时,加1就移动一个数组的长度。

指向一维数组的指针,取的是整个数组的地址,它加一代表着你这个数组的地址向后加一,而这个数组在内存中申请的是一片连续的内存单元,所以会直接指向数组末尾的下一个内存空间的地址。指向数组元素的指针取的是这个数组元素的地址,而数组中存放的是相同类型的多组数据,所以加一是指向这个元素的下一个元素,你可以当做是数组下标向后移动一位(数组名就是一个地址,数组的每个元素都有地址指向)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问