一:函数指针

1.函数指针案例(一)

#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

class Student
{
public:
    string name;
    int age;
    char sex;
public:
    Student(){}
    ~Student(){}

};

//将数组对象全部读入到文件中
void write_object(Student *students,int size)
{
    ofstream ofs("text.bat");
    if(ofs)
    {
        for(int i=0;i<size;++i)
        {
            cin>>students[i].name>>students[i].age>>students[i].sex;
            ofs.write(reinterpret_cast<char*>(&students[i]),sizeof(students[i]));
            ofs.flush();
        }

    }
    else
    {
        cout<<"write failed"<<endl;
    }
    ofs.close();
}

//将文件的数据全部读到数字对象中
void read_object(Student *students,int size)
{
    ifstream ifs("text.bat",ios::binary);

    if(ifs)
    {
        for(int i=0;i<size;++i)
        {
            ifs.read(reinterpret_cast<char*>(&students[i]),sizeof(students[i]));
        }
    }
    else
    {
        cout<<"read failed"<<endl;
    }
    ifs.close();
}

void show_students(Student *students,int size)
{
    for(int i=0;i<size;++i)
    {
        cout<<students[i].name<<","<<students[i].age<<","<<students[i].sex<<endl;
    }
}

//定义函数指针类型
typedef void(CALL)(Student*,int);

int main()
{
    Student students[3];
    Student students2[3];
    int size = sizeof(students)/sizeof(students[0]);

    //定义一个函数指针数组
    CALL *func_arrays[4]={write_object,
                          show_students,
                          read_object,
                          show_students};
    //循环调用函数
    for(int i=0;i<4;++i){
        if(i==2||i==3){
            func_arrays[i](students2,size);
        }
        func_arrays[i](students,size);
    }
    return 0;
}

二:指针数组

概念:由指针构成的一个数组。

1.指针数组案例(一)

#include<stdio.h>
#include<string.h>

//要求:输入10个字符串,请打印最长的字符串

int main()
{
    char *section[10];
    int longest_index=0;
    for(int i=0;i<10;i++)
    {
        scanf("%s",section[i]);
        if(longest_index<strlen(section[i])
            longest_index=i;
    }
    printf("%s",section[i]);
    return 0;
}

三:数组指针

概念:指向一个数组大小固定的指针。

1.数组指针案例(一)

#include<stdio.h>
#include<string.h>

//要求:使用数组指针操作二维数组

int main()
{
    int array[10][10];
    int i,j;
    for(i=1;i<=10;i++)
    {
        for(j=1;j<=10;j++)
        {
            array[i-1][j-1]=i*j;
        }
    }


    //p指针指向了一个行大小固定的数组
    int (*p)[10]=array;
    for(i=0;i<10;i++)
    {
        //1.可以在这里成成p=p[i];或标记2
        for(j=0;j<10;j++)
        {
            //将p的转换成整形,即地址,强转为int*,则就可以操作元素了。
            int *t = (int*)((int)*p+sizeof(int)*j);
            printf("%6d,",*t);
            //这里也可以使用p[i][j]
        }

        //2.这里的p++实际上是p+sizeof(int[10])
        p++;
        printf("\n");
    }

    return 0;
}

四:指针常量

概念:指针指向的地址不可改变,但是可以通过指针改变指向地址的值。

五:常量指针

概念:指针指向的地址是一个常量,不可通过指针改变,但是指针可以改变指向。
01-22 18:16
查看更多