计组学习 —— C and Pointers
由于已经比较熟悉C了,上课时跳过了许多已经熟知的部分,只记录自己不太熟的地方。
Unions in C
-
定义
和struct基本一样
union foo{ int i; char c; double k; };
union表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能存储其中一个成员变量的值。
union只为单个最大元素存储数据,然后它会映射所有数据到相同的空间
-
编译声明
在一个union被声明时,编译程序自动地产生一个变量,长度为union中“占位最大”的元素的占位大小的整数倍
例如,union内有一个char s[10],一个int b,那么foo的内存空间长度为12,因为int类型是4,采取4的三倍。
而如果是一个char s[10],一个double b,那么长度为16,因为double类型长度为8,采取8的二倍
C More Pointer
关于指针的绑定与解绑
首先明确概念,后缀自增的结合性是从左往右的,优先级很高,为2,括号的优先级也为2,前缀自增的结合性是从右往左的,优先级略低,为3,而取值运算符*和取地址运算符&都是优先级为3的运算符,结合性也都是从右向左的,赋值语句优先级为16,比绑定还在之后计算
一句话概括:如果使用前缀形式,则会在表达式计算之前完成自增或自减,如果使用后缀形式,则会在表达式计算之后完成自增或自减。
-
*--p
首先看到运算符都是优先级为3的,那么从右往左,首先p,之后p的值和--运算符绑定,数值减1,最后再被解绑。
如果p是一个指针,那么我们此时取到了某个数组的前一个元素的值
-
++*p
优先级都是为3的,还是从右往左,先对p进行取消引用,取得了指针p指向的值,接下来++和这个值绑定,立即执行
如果p是一个指针,那么我们做到了让某个数组的某一个元素的值+1
-
*p++
首先看到了后缀自增,我们将++和p进行绑定,接下来处理*p。由于后缀自增最后生效,所以我们此时返回的值为*p,接下来p的值+1
如果p是一个指针,那么我们做到了获取这个指针指向的元素的值,并且我们让指针指向了数组的下一个元素
-
char c = *p++ ; c=*p;
根据上述原理,如果p最开始指向了数组的第0个元素,之后我们返回了一个*p,c的值为数组的第0个元素,之后指针指向了数组的第1个元素。然后接下来执行第二句话,c的值变成数组第一个元素
-
char c =(*p)++;c=*p;
根据上述原理,++此时和()绑定,同理第一句话返回的仍然是*p,c的值为数组的第0个元素,接下来我们++使得数组的第0个元素+1。接下来执行第二句话,c的值变成了数组第0个元素+1.
二级指针:
-
例题:
int x[]={2,4,6,8,10}; int *p=x; int **pp = &p; (*pp)++; (*(*pp))++; printf("%d\n",*p);
首先,p指向数组x的第一个元素的地址,pp指向指针p的地址,接下来使用*获取指针pp指向的元素的值,并且让这个值+1,那么也就是p的值+1。
(*PP)++这句话等同于p++
p的值表示了x第一个元素的地址,此时p值+1,也就是p指向了x的第二个元素的地址,此时p指向4。
接下来执行(*(*pp))++,同理,此时取值到4,让4++,变成了5,最后输出p指向的元素的值,也就是5
扯点没用的,感觉cs61c讲指针这部分的女老师好漂亮,于是本来还算挺会的指针,就再学了一遍(bushi
(放张漂亮姐姐的截图~)
好喜欢,好喜欢...(擦口水)...
刚好是戳到我的长相呢
标签:02,计组,指向,++,Pointers,元素,union,数组,指针 From: https://www.cnblogs.com/ZzTzZ/p/16981786.html莫名发现,自从使用markdown了之后,闲扯都变少了好多,主要是排版没有之前那么
自由凌乱。
这个假期每天在家呆着,睡醒了心情好就挂个课,有空余的时间就控制自己不去打游戏,去看美女姐姐学习,然后也在学着多变点花样做饭做菜,有在好好生活呢!
感觉再下一个阶段就是开始看番,重回二次元了