int main()
{
int m[12],*p[3],k,sum=0;
for(k=0;k<12;k++)
{
m[k]=2*k;
if(k<3)
p[k]=m+2*k*k;
}
for(k=0;k<3;k++)
sum+=(*(p+k))[4-k];
printf("%d",sum);
return 0;
}
(*(p+k))[4-k]对应着什么啊?
9 个解决方案
#1
p是指针数组
*(p+k)是索引为p+k的数组,然后对这个数组取下标为[4-k]的值
*(p+k)是索引为p+k的数组,然后对这个数组取下标为[4-k]的值
#2
你可以放断点,调试看;也可以printf出来看呀
#3
需要一个纸上作业过程:
1.先认识程序中的每一个变量(含数组)
m是一个有12个整型元素的数组
p是3个指针元素的数组,指针指向了整型数组(现在没有确切的指向)
k是循环变量
2.再看前一个循环过程
2.1.m数组的值应该是0,2,4,6,。。。,22
2.2.p数组的值应该是m,m+2,m+8,即指向了m数组中的m[0],m[2],m[8]
3.最后看后一个循环
3.1.先解读*(p+k):随着k=0,1,2;*(p+k)就是p[0],p[1],p[2],它们的值是指针&m[0],&m[2],&m[8]
3.2.再将(*(p+k))[4-k]解读为:k=0时,(&m[0])[4]即m[4]
k=1时,(&m[2])[4-1]即从m的第二个元素起(记为0点)向后数3个,即m[5]
k=2时,(&m[8])[4-2])即从m第八个元素起向后数2个,即m[10]
#4
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
#5
这个问题你得去看看《C和指针》当中,对指针和数组做对照的那段,才能明白C这个东西把[]语法设计得真乱套
#6
数组名就是
地址---就是指针---指向该数组的收地址
#7
给错分了!我是要给3楼的……
#8
嘿嘿!
#9
不厚道吧
#1
p是指针数组
*(p+k)是索引为p+k的数组,然后对这个数组取下标为[4-k]的值
*(p+k)是索引为p+k的数组,然后对这个数组取下标为[4-k]的值
#2
你可以放断点,调试看;也可以printf出来看呀
#3
需要一个纸上作业过程:
1.先认识程序中的每一个变量(含数组)
m是一个有12个整型元素的数组
p是3个指针元素的数组,指针指向了整型数组(现在没有确切的指向)
k是循环变量
2.再看前一个循环过程
2.1.m数组的值应该是0,2,4,6,。。。,22
2.2.p数组的值应该是m,m+2,m+8,即指向了m数组中的m[0],m[2],m[8]
3.最后看后一个循环
3.1.先解读*(p+k):随着k=0,1,2;*(p+k)就是p[0],p[1],p[2],它们的值是指针&m[0],&m[2],&m[8]
3.2.再将(*(p+k))[4-k]解读为:k=0时,(&m[0])[4]即m[4]
k=1时,(&m[2])[4-1]即从m的第二个元素起(记为0点)向后数3个,即m[5]
k=2时,(&m[8])[4-2])即从m第八个元素起向后数2个,即m[10]
#4
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
#5
这个问题你得去看看《C和指针》当中,对指针和数组做对照的那段,才能明白C这个东西把[]语法设计得真乱套
#6
数组名就是
地址---就是指针---指向该数组的收地址
#7
给错分了!我是要给3楼的……
#8
嘿嘿!
#9
不厚道吧