关于 c 指针 二维数组的输出问题,*(p+k * j+l)中间的*是什么意思.

jassica_jin 1年前 已收到1个回答 举报

gf280677 幼苗

共回答了16个问题采纳率:81.3% 举报

确定没写错的话,只可能是乘号了
*在C里只有作乘号或者指针运算符处理
做指针运算符的话,应该是单目运算符,这样的话,也就是等效于*(p+k (* j)+l),就会有语法错误了
所以只能作乘法运算符解

1年前 追问

4

jassica_jin 举报

那既然是乘法 这句话应该怎么理解呢。

举报 gf280677

运算符优先级嘛 *(p+(k * j)+l) 先乘,后加,最有取指针的指向的内容 具体是什么,根据前后的语句才可以看吧,你光给我这句,让我怎么说

jassica_jin 举报

# include void f(int * p,int i,int j) { int k,l; for (k=0; k

举报 gf280677

哦,这个啊 此处利用了C对数组越界不检查的特性 int a[2][3] = {1, 2, 3, 4, 5, 6}; 其中a[1][0]=4,其实a[1][0]也可以看做a[0][3],因为数组的元素是连续存储的嘛 其实f(*a,2,3);就是利用我说的方法想把二维数组视为一维数组来处理 指针p始终指向了成为以为数组后的数组的头部,k代表的是二维数组下的行号,l是二维数组下的列号 k * j+l这个其实就是吧二维数组给一维数组化,原先二维数组的行号*原先二维数组的列数+原先在二维数组中列号=在新一维数组中的列号 其实单步执行一下的话,很容易就理解了
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.022 s. - webmaster@yulucn.com