Kx Blog


  • 首页

  • 归档

  • 标签
Kx Blog

数据结构与算法01 顺序表

发表于 2019-03-13
Kx Blog

iOS Runtime机制01 C知识

发表于 2019-03-13
1、指针
  • 普通指针

    指针指向的内存空间的值为对应的数据的存储空间首地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ///普通指针
    int a = 4;
    int *p = &a;//&为获取地址符号
    printf("a=%d\n",a);
    printf("&a=%p\n",&a);
    printf("p=%p\n",p);
    //结果
    a=4
    &a=0x7ffeefbff59c
    p=0x7ffeefbff59c
  • 指针的指针

    指针指向的内存空间的值为一个指针的地址,指向的指针的地址为对应数据的存储空间首地址。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ///指针的指针
    int **pa = &p;
    printf("a=%d\n",a);
    printf("&a=%p\n",&a);
    printf("p=%p\n",p);
    printf("&p=%p\n",&p);
    printf("pa=%p\n",pa);
    printf("*pa=%p\n",*pa);
    //结果
    printf("a=%d\n",a);
    printf("&a=%p\n",&a);
    printf("p=%p\n",p);
    printf("&p=%p\n",&p);
    printf("pa=%p\n",pa);
    printf("*pa=%p\n",*pa);
    printf("**pa=%d\n",**pa);
  • 数组指针

    指针指向的内存空间为数组的首地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    ///数组指针
    char b[] = "hello";
    char *pb = b;
    printf("b=%p\n",b);
    printf("pb=%p\n",pb);
    printf("&pb=%p\n",&pb);
    printf("%lu\n",sizeof(char));
    for (int i = 0; i < 5; i++) {
    printf("&b[%d]=%p\n",i,&b[i]);
    }
    printf("pb+1=%c\n",*(pb+1));
    //结果
    b=0x7ffeefbff58a
    pb=0x7ffeefbff58a
    &pb=0x7ffeefbff580
    1
    &b[0]=0x7ffeefbff58a
    &b[1]=0x7ffeefbff58b
    &b[2]=0x7ffeefbff58c
    &b[3]=0x7ffeefbff58d
    &b[4]=0x7ffeefbff58e
    pb+1=e
  • 函数指针

    返回值类型(*\ 指针变量名)([形参列表])

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int getMax(int i, int j) {
    int result = i > j ? i : j;
    return result;
    }
    ///函数指针
    int (*p1)(int , int);
    p1 = getMax;
    int re = p1(10,20);
    printf("re = %d\n",re);
    //结果
    re = 20
Kx Blog

OpenGLES关键术语解析

发表于 2019-03-08

OpenGLES 关键术语解析

1、片元

二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元

2、图元

图元就是组成图像的基本单元,比如三维模型中的点、线、面等等

3、片段

片段是指具有相同属性的一小部分像素区域

4、光栅化

光栅化(Rasterization)是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元

Kx Blog

可选参数

发表于 2019-01-08
Kx Blog

数组遍历for...of

发表于 2019-01-08
Kx Blog

Go学习3·常量与运算符

发表于 2019-01-06
Kx Blog

解构赋值

发表于 2019-01-06
解构赋值

赋值操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let [a,b,c] = [10,20,30];
console.log(a,b,c);//10 20 30
let [x,y,...other] = [1,2,3,4,5];
console.log(x,y,other); //1 2 [ 3, 4, 5 ]
let {name,age} = {name:"Kx",age:20};
console.log(name,age);//Kx 20
function func1({x=1,y=2}){
return x + y;
}
console.log(func1({}));//3
console.log(func1({x:10}));//12
console.log(func1({x:20,y:20}))//40

Kx Blog

Symbol的用法

发表于 2019-01-06
Symbol的用法

1、用于定义常量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const Java = Symbol()
const Oc = Symbol()
const Perl = Symbol()
var lang = Java;
if (lang == Java) {
console.log("equal to Java");
}
if (lang == Oc) {
console.log("equal to Oc");
}
if (lang == Perl) {
console.log("equal to Perl");
}
//输出结果:equal to Java

2、用于字典的key

1
2
3
4
5
6
7
8
var dict = {};
let obj1 = Symbol();
let obj2 = Symbol()
dict[obj1] = "hello";
dict[obj2] = "world";
console.log(dict);
//输出结果:{ [Symbol()]: 'hello', [Symbol()]: 'world' }

3、半隐藏属性,知道的人可以用,不知道的人不知道怎样用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const kUserKey = Symbol();
class User {
constructor(key,name,age){
this[kUserKey] = key;
this.name = name;
this.age = age;
}
checkKey(key) {
return this[kUserKey] == key;
}
}
var user = new User('123',"Kx",23)
console.log(user[kUserKey],user.name,user.age);//123 Kx 23
console.log(user.checkKey('123'));//true
console.log(user.checkKey('456'));//false
console.log(Object.keys(user));//[ 'name', 'age' ]
console.log(JSON.stringify(user));//{"name":"Kx","age":23}

Kx Blog

Symbol新类型

发表于 2019-01-06
Symbol新类型

Symbol为原始类型,可以为int,可以为string,每个symbol的值都会有一个唯一的标识。
常用于常量和状态变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let str1 = "hello world"
let str2 = "hello world"
console.log(str1);//hello world
console.log(str2);//hello world
console.log(typeof str1)//string
console.log(str1 == str2);//true
console.log(str1 === str2);//true
let str3 = Symbol("hello world");//每个symbol对象都会有一个唯一的值
let str4 = Symbol("hello world");
console.log(str3);//Symbol(hello world)
console.log(str4);//Symbol(hello world)
console.log(typeof str3);//类型是symbol
console.log(str3.toString());//Symbol(hello world)
console.log(str3 == str4);//不是按照值去比较的,是根据分配的哈希值去比较
console.log(str3 === str4);//值不相等,类型也不会相等
Kx Blog

模版的延长线

发表于 2019-01-06
字符串模版拓展

实战:给字符串添加特定的格式
通过对参数进行特殊处理,实现markdown的加粗效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let name = 'Kx'
let address = 'Home'
let fmtStr = markDown`hello , ${name},
Welcoome ${address}!,
Have Fun!`
console.log(fmtStr)
function markDown(formats,...args){
console.log(formats);
console.log(args);
var result = "#标题"
for(var i = 0; i < formats.length;i++){
result += formats[i] + "**" + (args[i] || "") + "**";
}
return result;
}

12…6
Kx

Kx

keep

58 日志
11 标签
© 2019 Kx
由 Hexo 强力驱动
主题 - NexT.Muse