数组与指针

Posted lvfengkun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组与指针相关的知识,希望对你有一定的参考价值。

一个变量有地址,一个数组包含若干个元素,每个数组元素都在内存中占用储存单元,它们都有相应的地址。

指针变量既可以指向变量,也可以指向数组元素(把某一元素的地址放在一个指针变量中)。

所谓数组元素的指针就是数组元素的地址。

定义一个指向数组元素的指针变量的方法,与指向变量的指针变量相同。

例:int a[10];

  int *p;

  p=&a[0];

注:若数组为int型,则指针变量的基类型也为int型。

引用一个数组元素,可以用:

(1)下标法,如a[i]形式;

(2)指针法,如*(a+i)或*(p+i)。

基中的a是数组名,p是指向数组元素的指针变量,其初值p=a等价于p=&a[0]。

注:数组名即编译为数组的第一个元素的地址。

例:输出数组中的全部元素。

假设一个a数组,整型,有10个元素,要输出个元素的值有三种方法。

(1)下标法。

(2)通过数组名计算数组元素地址,找出元素的值。

(3)用指针变量指向数组元素。

下标法:

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[10],i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("
");
    for(i=0;i<10;i++)
    {
        printf("%d",a[i]);
    }
}

指针法:

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[10],i;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("
");
    for(i=0;i<10;i++)
    {
        printf("%d",*(a+i));
    }
}

指针变量法:

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[10],i,*p;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    p=a;
    printf("
");
    for(i=0;i<10;i++)
    {
        printf("%d",*p);
        p++;
    }
}

思考:

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[10],i,*p;
        p=a;
    for(i=0;i<10;i++)
    {
        scanf("%d",&p++);
    }
    printf("
");
    for(i=0;i<10;i++,p++)
    {
        printf("%d",*p);
    }
}

错误原因:&后必须接函数指示符

纠正:第十行改为        scanf("%d",&p+i);

 

以上是关于数组与指针的主要内容,如果未能解决你的问题,请参考以下文章

在第6731次释放指针后双重免费或损坏

指针与数组

指针与数组

Go语言切片

指针与一维数组和二维数组以及字符串指针数组的学习笔记

c语言中如何通过二级指针来操作二维数组