首先,记得运算符的优先级排序
1.运算符优先级
优先级 | 运算符 | |||||||||||||
1 | ++(后置自增)--(后置自减)、[]、 ()、 . (结构体/联合体成员对象访问)、-->(结构体/联合体成员对象指针访问) | |||||||||||||
2 | ++(前置自增)、--(前置自减)、+、-、~(按位取反)、!、(type)强转、&(取地址)、 sizeof、*(解引用) | |||||||||||||
3 | *(乘号) /(除号) %(取模) | |||||||||||||
4 | +(加号) -(减号) | |||||||||||||
5 | <<(左移)、>>(右移)、>>> | |||||||||||||
6 | <(小于)、>(大于)、<=(小于等于)、>=(大于等于) | |||||||||||||
7 | ==(等于)、!=(不等于) | |||||||||||||
8 | &(按位与) | |||||||||||||
9 | ^(按位异或) | |||||||||||||
10 | |(按位或) | |||||||||||||
11 | &&(逻辑与) | |||||||||||||
12 | ||(逻辑或) | |||||||||||||
13 | ?:(三目运算符) | |||||||||||||
14 | =(赋值)、*=、/=、%=、+=、-=、<<= 、>>=、>>>=、&=、^=、 |= | |||||||||||||
15 | ,(逗号) |
其次:数组名的各层含义:(char arr[]="abcdefg")
1.在(arr)中,arr表示数组首元素的地址
2.在sizeof(arr)中,arr表示整一个数组,计算的是整一个数组所占多少个字节空间
3.在(&arr)中,这里的arr表示整一个数组的地址,不是这一个数组的首元素的地址
4.*arr中,这里的arr表示数组中首元素的地址。
再其次:知道什么是大小端
整数:10000
大端: 00 00 27 10
小端: 10 27 00 00
再其次:知道操作符sizeof和strlen()函数的区别:
(1).sizeof是一个操作符,用来计算变量(类型)所占空间的大小,不关注内存中存放的具体内容,单位是字节。
sizeof这一个操作符,计算返回的结果是size_t类型的,也就是无符号类型的。
(2).strlen()函数是一个库函数,需要头文件<string.h>,在C语言标准中专门计算字符串长度的,只能针对字符串从参数给定的地址后一直找‘\0’,统计‘\0’之前出现的字符个数。
再其次:知道指针数组所占字节空间大小(例如:int* arr[5]={1,2,3,4,5,})
1.在32位系统下和在64位系统下,指针所占字节空间的大小:
32位系统下,占4个字节
64位系统下,占8个字节
2.指针在解引用下,访问字节大小权限的不同
例如:
char* b =‘A’,虽然指针大小所占字节空间是(4/8),在解引用条件下,访问字节大小权限是1个字节。
int* a=489,虽然指针大小所占字节空间是(4/8),在解引用条件下,访问字节大小权限是4个字节。
short* c=255,虽然指针大小所占字节空间是(4/8),在解引用条件下,访问字节大小权限是2个字节。
……
--------------------------------------------------------------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char* c[] = { "ENTER","NEW","POINT","FIRST" };
char** cp[] = {c+3,c+2,c+1,c};
char*** cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *-- * ++cpp + 3);
printf("%s\n", *cpp[-2] + 3);
printf("%s\n", cpp[-1][-1] + 1);
return 0;
}
代码分析图:
代码结果如下: