一、各类指针常见用法(函数指针,数组指针,指针数组,指针常量,常量指针)...

一:函数指针

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;
}
View Code

2.函数指针案例(二)

 

二:指针数组

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

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;
}
View Code

2.指针数组案例(二)

 

三:数组指针

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

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;
}
View Code

 

 

四:指针常量

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

 

 

五:常量指针

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

 

转载于:https://www.cnblogs.com/running-world/p/11355519.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值