C 指针和整数的加减法运算
1-1 指针和整数的加减法运算
//获取: <stat>[,[<tac>],[<ci>],[<AcT>]] +CGREG: 2,5,"27CA","74FD",0
pos[0] = strstr(single_cmd.tx_buf, ","); //第1个,后面为stat
pos[1] = strstr(pos[0] + 1, ",\""); // “,/”后面为[<tac>]
pos[2] = strstr(pos[1] + 4, ",\""); // “,/”后面为[<ci>]
pos[3] = strstr(pos[2] + 4, ","); //第4个,后面为[<act>]
需求主要是源于这部分的代码:
起初对于该段代码的疑点主要是在这个位置:strstr(pos[0] + 1, ",\""); 这里的pos[0] + 1 在数组中的含义是当前数组下标对应的值+1,但是当前的代码工程中这是一个char * 类型的指针,指针对应的含义是pos[0] 是一个指针数组,每个元素都是一个 char* 类型的指针,它们用来存储通过 strstr 函数找到的子串位置。
1-1-1 实际的案例演示
虽然指针之间的加法是非法的,但指针与整数的加法或减法是合法的,且有明确的语义。
指针与整数的加法:
-
如果
ptr
是一个指针,n
是一个整数,那么ptr + n
的结果是一个新的指针,指向ptr
所指向的数组中第n
个元素之后的位置。 -
如果
ptr
指向数组的第i
个元素,那么ptr + n
指向第i + n
个元素。
int arr[] = {10, 20, 30, 40, 50};
int* ptr = &arr[0]; // 指向第1个元素
int* new_ptr = ptr + 2; // 指向第3个元素(值为30)
指针与整数的减法:
-
如果
ptr
是一个指针,n
是一个整数,那么ptr - n
的结果是一个新的指针,指向ptr
所指向的数组中第n
个元素之前的位置。 -
如果
ptr
指向数组的第i
个元素,那么ptr - n
指向第i - n
个元素。
int* new_ptr = ptr + 2; // 指向第3个元素
int* prev_ptr = new_ptr - 1; // 指向第2个元素(值为20)
总结:
-
指针的减法:合法且有意义,用于计算两个指针之间的元素个数。
-
指针的加法:非法且未定义行为,不被C语言标准支持。
-
指针与整数的加法/减法:合法且常用,用于指针的移动操作。
......