实验报告_实验2 指针(2)(学号_姓名)
一、实验目的:
1、掌握指针变量p的算术运算:p±n(n为整数)、p++(p--)、++p(--p),理解移动一个数据单位的真实含义;
2、能够用数组名或指针变量作函数形参,在函数中实现对数据的批量处理。
3、熟悉二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,以及如何利用它们来存取数组元素。
二、实验内容
2、(基础题)使用指针编程实现:输入3个正整数,按由小到大顺序输出。程序运行结果如下所示:
(提示:可以调用swap(int * x, int * y)来实现)
程序代码:
3、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,加减1所移动
的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题:
问题:
(1)二维数组a的“行指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;
答:
问题1:是int型的数组
问题2:1个字节
a[2][2]={{1,2}{3,4}}
(2)二维数组a的“列指针”的类型是什么?加减1所移动的字节数是多少?列举2个该类型指针的例子;
问题1:是int型的数组
问题2:4个字节
a[2][2]={{1,2}{3,4}}
(3)二维数组a的“列指针”与“行指针”有什么联系?a+i与a[i]、*(a+i)、&a[i]有什么关系?
(4)列出a[i][j]地址的3种写法。
Int *p=a;
4、(提高题)编程实现:在主函数中定义一个有10个元素的float数组,并赋值。该程序还包含两个函数:
(1)void change(float *x,int k)的功能是让该数组中的前k个元素值为0;
(2)void print(float *x,int n)的功能是输出该数组中的所有元素;
请在主函数中分别调用这两个函数,验证是否实现所要求功能。
程序代码:
#include<stdio.h>
int  main()
{
    void change(float* x, int k);
    void print(float* x, int n);
    float a[10], * p = a;
    int i, k, n;
    printf("请输入k的值:");
    scanf_s("%d", &k);
    printf("请输入10个数的值:");
    for (p = a; p < (a + 10); p++)
        scanf_s("%f", p);
    printf("输入的10个数的值:");
    for (i = 0, p = a; i <= 9; i++, p++)
        printf("%2f", *p);
    printf("\n");
    p = a;
    change(p, k);
    p = a;
    print(p, 10);
}
void change(float* x, int k)
{
    int i = 0;
指针与二维数组
    for (i = 0; i < k; i++, x++)
    {
        *x = 0;
    }
}
void print(float* x, int n)
{
    int i;
    for (i = 0; i < n; i++, x++)
        printf("%2f", *x);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。