我有一个数组:
int x[3][5]={
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
*N = X; 指针n指向哪里?如果它只是x而不是&那么它就是基地址.现在是什么?
*x指的是第一个数组({1,2,3,4,5}),相当于x [0].添加一个以x移动到下一个数组,因此*(x+1)将引用第二个数组,并且相当于x [1].
*(*x + 2)因此是第一个数组中的第三个元素,即3.这意味着它*(*x + 2) + 5等于8.
括号很重要,例如,*(*(x+2))它将是第三个数组中的第一个元素.
*(*x + 2)得到的值相同*(*x) + 2,但不使用数组的相同元素.
*x是一个解除引用操作.换句话说,"给我x指的是什么".由于这是一个数组(数组),解引用x将为您提供第一个数组.这相当于数组访问语法x[0].
*(*x+2)+5相当于x[0][2] + 5,它给你8.这是因为:
*x与x[0](见#1)相同并且与之*(x + 2)相同x[2].一旦你完成了两次解引用,就会从数组(类似于双指针)到数组(单指针)到实际数字(第一个数组中的第三个项目).然后,它只是3 + 5 = 8.
*(*x+2)相当于x[0][2](见#2),它是3(数组中的第三个元素).但是,*(*x) + 2给你x[0][0] + 2(数组中的第一个元素加2),即1 + 2 = 3.相同的答案,但获得它的方式却截然不同.