C语言行指针和列指针 10

谭浩强不是说行指针转列指针加*号,列指针转行指针加&吗?那为什么这样就合法那样就不合法了呢?比如:*(a+1)这是行指针转列指针(当a是二维数组名),意图是将a先指向下一... 谭浩强不是说行指针转列指针加*号,列指针转行指针加&吗?那为什么这样就合法那样就不合法了呢?比如:*(a+1)这是行指针转列指针(当a是二维数组名),意图是将a先指向下一行,再转化,即a[1][0]的地址(列指针),那我同理把&当成*用就不行?现在我定义一个int (*p)[3],把a赋给他,p = & (p[g] + s)为什么就错了,我的意图是将p变成下一列的行指针,怎么办呢?先用p[g]将行指针先转化为列指针再加上s,即所要移的列数,成功后将他前面加个&,谭浩强不是说加&列指针就能成为行指针吗?所以我就这样干了,请问为什么错,错误为'&' requires l-value 展开
 我来答
文正153
2015-06-22 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:636万
展开全部
&在任何时候都不能寻址, 它是用来取地址的.
p[i]在任何时候都等价于*(p+i)
p[i][j] (其中p是int*[x]类型的)在任何时候都等价于*(*(i*x)+j)
x是一个变量.
int a[10][20]
这里x = 20
int a[20][10]
这里x = 10

C语言没有什么行指针, 列指针.
一维数组就是一级指针,
二维数组是特殊的二级指针,
以此类推......
追问
p = & (p[g] + s)要想实现以上目的怎么改
追答
你的意思是行指针变列指针吧?或者是它俩来回变?
我可以很负责地告诉你, 这不可能. 最起码在逻辑上是不可能的.
他的书我没看过, 不知道他写的是什么, 但是他应该会说二维数组是不存在的. 二堆数组是包含一维数组的一维数组, 也就是说:
int a[2][2] = {
{1, 2},
{3, 4},};
这个定义它其实在内存中出现的是:
1 2 3 4
但是如果是行指针, 它可以指向1, 2这是可以的.
但是, 如果是列指针, 它应该指向的是1, 3. 这在内存看来是不可能的. 而且从逻辑上来看也是不可能的.
a[0]这是一个数组指针, 它指向的是{1, 2}
a[1]也是一个数组指针, 它指向的是{3,4}
而你的指针是要指向1和3, 而它们都不在一个数组中, 你怎么指向它们?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式