36 lines
1.2 KiB
C++
36 lines
1.2 KiB
C++
/*#include <stdio.h>
|
||
|
||
int main() {
|
||
char *p[4] = {"Hello", "World", "C", "Language"};
|
||
|
||
printf("%s\n", p[1]); // 输出:World
|
||
printf("%c\n", *p[1]); // 输出:W (p[1]指向"World",*p[1]就是'W')
|
||
printf("%c\n", *(p[1] + 1)); // 输出:o (p[1] + 1 是 'o' 的地址)
|
||
|
||
return 0;
|
||
}
|
||
*/
|
||
#include <stdio.h>
|
||
|
||
int main() {
|
||
int arr[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
|
||
int (*p)[4] = arr;
|
||
printf("%d\n", (*p)[2]); // 输出 3,因为 (*p) 就是 arr[0],即 {1, 2, 3, 4},然后 [2] 表示访问第 3 个元素。
|
||
//1、指针表示地址 2、把指针直接看成数组
|
||
//(*p)很牛逼,什么都可以代替,什么数(组)啊,字符串(组)啊都可以。
|
||
//(*p)[i]:p 是一个指向 数组(如 int[4])的指针。首先解引用 p 得到数组本身,再通过索引 [i] 访问数组中的元素。
|
||
//*p[4]:p 是一个指针组,有5个指针,*p[i]是解析p[i]的原值
|
||
//*(p + i):p 是一个指向某个类型元素的指针。通过指针运算 p + i 来访问偏移 i 个位置的元素。
|
||
//指针中的p[i]完全可以理解为*(p+i)
|
||
char arr[2][4] = {"abc", "def"}; // 2 个 4 字符数组
|
||
char (*p)[4] = arr; // p 指向 arr
|
||
|
||
printf("%s\n", p[0]); // 输出:abc
|
||
printf("%c\n", (*p)[1]); // 输出:b
|
||
p++; // p 移动到下一个 char[4] 数组
|
||
printf("%s\n", p[0]); // 输出:def
|
||
|
||
return 0;
|
||
}
|
||
|