#include
int main() {
const char* arr[] = { "C", "C++", "Java", "Python" };
const char* (*ptr)[4] = &arr;
printf("%s", ++(*ptr)[2]);
return 0;
}
第5行的(*ptr)[4]中,ptr是一个1⃣️数组指针: 指向包含四个char*元素的数组arr的指针,即地址的地址———— ptr = &arr, *ptr = arr。所以,第6行的++(*ptr)[2]就等价于++arr[2]。
然后,2⃣️[]操作符的优先级,大于自增操作符++。所以,arr[2]就是字符串”Java”,即char数组{ ‘J’, ‘a’, ‘v’, ‘a’ }的首地址,首地址指向字符‘J’,自增之后指向1号字符‘a’。此时,以此为首地址的char数组就是{ ‘a’, ‘v’, ‘a’ },作为一个字符串就是“ava”。
⚠️补充:3⃣️ *ptr[4]是指针数组,即数组中的每个元素都是一个指针/地址,比如第4行的char* arr[]就是。那如果第5行改成 *ptr[4]的话,等号=右边得改成{ arr, arr + 1, arr + 2, arr + 3}, 此时,ptr就是地址、的地址、的地址(三重奏),ptr[0][1][0] == ‘+’ == arr[1][0],或者,直接把arr当成2维数组,ptr当作3维的。
int x = 3;
x += x -= x * x;
‼️从右到左算:
x = x - x * x ————>>
x
=
−
6
x=-6
x=−6x = x + x ————>>
x
=
−
12
x=-12
x=−12fopen返回一个指向FILE结构体的指针mode控制符规定了打开文件的格式rb+表示对二进制的读写‼️fopen返回的是地址。
FILE *f = fopen(“filename”, “rb+”);
f才是指针!
只要mode带+就是读写全能,mode的具体参数细节参考——>>博客文章链接