char **++思考

#include <iostream>

void print(char **str) {
    str++;
    std::cout << *str << std::endl;
    std::cout << (int*)*str << std::endl;
}

int main() {

    char a[10] = {"aaa"};
    char b[10] = {"bbb"};
    char c[10] = {"ccc"};
    std::cout << (void*)b << std::endl;
    static char* arr[] = {a,b,c};
    char** ptr;

    ptr = arr;

    print(ptr);
    getchar();
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 代码注释: ``` #include "stdio.h" #define n 20 // 页面访问序列的长度 #define m 4 // 物理内存块数 void main() { int sr[n],i,j,q,mem[m]={0},table[m][n],cishu=0; // sr为页面访问序列,mem为物理内存块,table为记录物理内存块状态的二维数组,cishu为缺页次数 char flag,f[n]; // flag为标记是否缺页,f为记录每个页面是否缺页的数组 printf("请输入页面访问序列\n"); for(i=0;i<n;i++) // 读入页面访问序列 scanf("%d",&sr[i]); printf("\n"); for(i=0;i<n;i++) { // 遍历页面访问序列 q=0; while((sr[i]!=mem[q])&&(q!=m)) // 在物理内存中查找当前页面是否存在 q++; if(q==m) // 如果不存在,则标记为缺页 flag='*'; else flag=' '; if(flag=='*') { // 如果缺页,则进行FIFO页面淘汰算法 for(j=m-1;j>0;j--) mem[j]=mem[j-1]; mem[0]=sr[i]; } for(j=0;j<m;j++) // 将物理内存状态记录在table数组中 table[j][i]=mem[j]; f[i]=flag; // 记录当前页面是否缺页 } printf("输出结果为下表(0代表为空,*代表有缺页):\n"); for(i=0;i<m;i++) { // 输出物理内存状态 for(j=0;j<n;j++) printf("%3d",table[i][j]); printf("\n"); } for(i=0;i<n;i++) { // 输出每个页面是否缺页的状态 if(f[i]=='*') cishu++; printf("%3c",f[i]); } printf("\n"); printf("缺页次数为%d:",cishu); } ``` 2. 程序设计思路结构 输入页面访问序列 -> 遍历页面访问序列 -> 在物理内存中查找当前页面是否存在 -> 如果不存在,则标记为缺页 -> 进行FIFO页面淘汰算法 -> 将物理内存状态记录在table数组中 -> 记录当前页面是否缺页 -> 输出物理内存状态 -> 输出每个页面是否缺页的状态 -> 计算缺页率 3. 运行结果与理论算法实现结果一致。 4. 改写代码:计算缺页率 ``` #include "stdio.h" #define n 20 // 页面访问序列的长度 #define m 4 // 物理内存块数 void main() { int sr[n],i,j,q,mem[m]={0},table[m][n],cishu=0; // sr为页面访问序列,mem为物理内存块,table为记录物理内存块状态的二维数组,cishu为缺页次数 char flag,f[n]; // flag为标记是否缺页,f为记录每个页面是否缺页的数组 printf("请输入页面访问序列\n"); for(i=0;i<n;i++) // 读入页面访问序列 scanf("%d",&sr[i]); printf("\n"); for(i=0;i<n;i++) { // 遍历页面访问序列 q=0; while((sr[i]!=mem[q])&&(q!=m)) // 在物理内存中查找当前页面是否存在 q++; if(q==m) // 如果不存在,则标记为缺页 flag='*'; else flag=' '; if(flag=='*') { // 如果缺页,则进行FIFO页面淘汰算法 for(j=m-1;j>0;j--) mem[j]=mem[j-1]; mem[0]=sr[i]; } for(j=0;j<m;j++) // 将物理内存状态记录在table数组中 table[j][i]=mem[j]; f[i]=flag; // 记录当前页面是否缺页 } printf("输出结果为下表(0代表为空,*代表有缺页):\n"); for(i=0;i<m;i++) { // 输出物理内存状态 for(j=0;j<n;j++) printf("%3d",table[i][j]); printf("\n"); } for(i=0;i<n;i++) { // 输出每个页面是否缺页的状态 if(f[i]=='*') cishu++; printf("%3c",f[i]); } printf("\n"); printf("缺页次数为%d,缺页率为%.2f%%",cishu,(float)cishu/n*100); } ``` 5. 当物理内存块数为5时,缺页率变小;当物理内存块数为3时,缺页率变大。 6. LRU算法实现思路: 建立一个双向链表,每个节点存储一个页面,节点之间按照页面的使用时间顺序排列,越靠近链表头部的页面是最近访问过的,越靠近链表尾部的页面是最久未访问的。每当一个页面被访问时,将其移到链表头部。当需要淘汰一个页面时,将链表尾部的页面淘汰掉。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值