数组指针和指针数组

s的类型是二维数组,但是其本身也是一个一维指针(数组指针),其静态类型是char(*)[10],每次移动是10个char长度也就是10字节。其解引用后静态类型是char*,每次移动是1个char长度也就是1字节。

值得注意的是,类似函数指针,s、*s、&s其值都是一样的,都是该二维数组首个元素的地址,因此不能将数组名当成是一个值为元素首地址的常规变量!因为永远无法取得其地址。

因此,下面代码中将s赋值给双重指针ps是完全错误的;双重指针要经过两次间接跳转访问元素:比如ps的值为0x0000ff33*ps首先跳转到该位置后取其值,比如说那个地址的值为0x0000eedd,将*ps当成字符串输出时,会再次跳转到地址为0x0000eedd的位置取出char,完全乱了。

而作为对比,数组指针解引用不会跳转,只会修改其步幅跨度

阅读全文 »

经典读者写者问题

读者写者问题

1、读者优先
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int readcount=0; 
semaphore RCSignal=1, fileSrc=1;
// RCSignal readcount修改互斥量
// fileSrc 文件资源互斥量:实现读者优先

// 读者进程:
P(RCSignal);
readcount++;
if (readcount == 1)
P(fileSrc);
V(RCSignal);
// ...
// reading is performed
// ...
P(RCSignal);
readcount--;
if (readcount == 0)
V(fileSrc);
V(RCSignal);

// 写者进程:
P(fileSrc);
//...
//writing is performed
//...
V(fileSrc);
2、写者优先
阅读全文 »

记录本书(对我来说)的一些重点内容

1 C++编程基础

  1. 初始化方法:构造函数法(constructor syntax)
1
2
int var(66);
int var2{66}; // ok
  1. srand()随机数种子;rand()则产生一个介于0和int所能表示的最大整数;需包含头文件cstdlib
  2. cerr(standard error)代表标准错误设备,与cout唯一区别就是不带缓冲,立即显示于用户终端
阅读全文 »

Hexo相关说明

安装Hexo

安装hexo

Hexo基本语法

hexo n 我的博客 == hexo new 我的博客 //新建文章
hexo g == hexo generate //生成
hexo s == hexo server //启动服务预览
hexo d == hexo deploy //部署

阅读全文 »

两种bitcpy的实现方式

1. 显示数据bits

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define HALF_WORD   uint16_t
#define WORD uint32_t
void showBits(void* d, int len) {
int bytes = len / 8;
unsigned char* p = (unsigned char*)d;
for (int i = 0; i < bytes; i++) {
unsigned char tmp = 0x80;
for (int j = 0; j < 8; j++) {
if (tmp & *p)
printf("1");
else
printf("0");
tmp >>= 1;
}
printf(" ");
++p;
}
printf("\n");
}

2. bitcpy 算术方式

拷贝方式是从单个字节的低位开始拷贝,进位式拷贝。

阅读全文 »
0%