它打印3,而我想要打印2.我不明白我只增加一次的原因.如果这是正确使用指针t指针还让我知道?我刚刚制作了一个示例代码,以了解指针的指针是如何工作的.
#include<stdio.h>
void main(){
int a1[] = {1,2,3,4,5,6};
int a2[] = {7,8,9,10,11,12};
int *a3 = a1;
int *a4 = a2;
int **a[2];
a[0] = a3;
a[1] = a4;
printf("%d",*(++(*a)));
}
Run Code Online (Sandbox Code Playgroud)
你声明了一个数组int**,所以*a不是指向int的指针,而是指向int的指针.增加指针会增加它指向的数据类型的大小,因此++*a将at值增加到a[0]指针的大小.
你实际存储的a[0]是指向int的指针,而不是指向int的指针.这是错误的,编译器应该已经警告过你.在您的体系结构上,似乎指针的大小是int的两倍,因此增量++*a会将两个整数的大小添加到指针,因此a [0]处的值(如果被解释为int*而不是int **)会跳过2.
要获得结果,您希望将其声明为数组int *.
int *a[2];
Run Code Online (Sandbox Code Playgroud)