C 指针初步认识(二)

作者: 2010jing | 来源:发表于2016-06-15 23:29 被阅读201次

数组指针

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

定义一个指向数组元素的指针变量

int a[10];  //定义a为包含10个整型数据的数组
int *p;  //定义p为指向整型变量的指针
p=&a[0] //应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。

把a[0]元素的地址赋给指针变量p。也就是说,p指向a数组的第0个元素。

1.png

C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。

int a[10];
int *p;
// 第一种方式
p=&a[0];
p=a;

// 第二种方式
int *p=&a[0];

//这两种方式是等价的

指针引用数组如果指针变量p已指向数组中的一个元素,
p+1指向同一数组中的下一个元素。
p-1指向同一数组中的前一个元素。

p = &a[0] // 指针p 指向数组首地址

//p+i  就是 a[i] 的地址,或者说它们指向a数组的第 i 个元素。
[/i]p+5 // 现在p往后移动5个元素,现在指向 a[5]的地址

// *(p+i)  就是 p+i  所指向的数组 a元素(的内容)
*(p+5) // 就是a[5]的内容

输出数组

//使用下标方法
#include <stdio.h>
int main(){
    int a[10], i;
    // 赋值
    for(i=0; i<10; i++)
        a=i;
    //打印     
    for(i=0;i<10;i++)
        printf("a[%d]=%d\n", i, a);
    return 0;
}
//使用计算元素的地址方法
#include <stdio.h>
int main(){
    int a[10], i;
    //赋值
    for(i=0; i<10; i++)
        *(a+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(a+i));
    return 0;
}
//指针变量指向元素方法
#include <stdio.h>
int main(){
    int a[10], i, *p;
    p = a;
    //赋值
    for(i=0; i<10; i++)
        *(p+i) = i;
        
    //打印
    for(i=0; i<10; i++)
        printf("a[%d]=%d\n", i, *(p+i));
    return 0;
}

例子
判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。

#include <stdio.h>

void nzp(int *a){
    int i;
    for(i=0; i<5; i++){
        if(a[i]<0) a[i]=0;  //小于0的元素,赋值为0
    }
}

int main(){
    int b[5], i;
    printf("Input 5 numbers:\n");
    for(i=0; i<5; i++)
        scanf("%d", &b[i]);
    printf("Initial values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ", b[i]);
    nzp(b);
    printf("\nFinal values of array b are: ");
    for(i=0; i<5; i++)
        printf("%d ",b[i]);

    return 0;
}

运行结果:

Input 5 numbers:
1↙
3↙
-90↙
-23↙
100↙
Initial values of array b are: 1 3 -90 -23 100
Final values of array b are: 1 3 0 0 100

说明:

  1. 形参数组 和 实参数组类型必须一致
  2. 形参数组和实参数组的长度可以不同, 一般定义方法原型的参数,可以允许不给出数组长度。如写成 void nzp(int a[]), 当然也可以 void nzp(int *a)

相关文章

  • C 指针初步认识(二)

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

  • C 指针初步认识(一)

    CPU 处理的数据保存在内存中。而内存又是分成一个个单元,这些单元是顺序排列,每个单元都有一个称为内存地址的编号,...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • 初步认识objective - c

    首先要明白什么是OC: oc是一种面向对象的计算机语言 C语言的基础上增加的一层面向对象的语法 OC是完全兼容c的...

  • 指针初步

    下面是引用和指针的问题:

  • C++ 、java 和 C# 的区别

    一、基础类型 c++: ** java:** C#: 二、指针 1.java 是没有指针这个概念,c++ 和 c#...

  • C++的初步认识

    1.从C到C++: C语言是1972年由美国贝尔实验室的D.M.Ritchie研制成功的,它是为计算机专业...

  • C#.NET初步认识

    一、C#与.NET是什么? C#:是一种编程语言,可以开发基于.NET平台的应用 .NET:一般指.NET Fra...

  • 第十三天

    董老师向我们介绍了指针的初步概念。指针是c语言中最重要的概念没有之一可谓c语言的灵魂对内存结构、数组、结构体等一系...

网友评论

    本文标题:C 指针初步认识(二)

    本文链接:https://www.haomeiwen.com/subject/yckmdttx.html