【发布时间】:2013-03-31 14:35:56
【问题描述】:
如果我有一个指针指向此示例中的变量“bs”之类的指针:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char **bs = {"this", "is", "a", "test"};
puts(bs);
return 0;
}
puts 语句在屏幕上显示“this”。我将如何让它显示“是”等等。我虽然可以这样做:
puts(bs+1);
向指针变量添加数字实际上有什么作用?它是指向下一个地址,还是考虑指针的类型并使用它所指向的变量的大小来确定下一个变量在内存中的起始位置?
【问题讨论】:
-
这已经在这里被回答了一千次,在许多教程和文本中。请做一些研究......包括只是尝试一下。
-
它指向下一个地址....下一个地址计算为....baseaddress+ sizeofpointertype(1代表char,2代表int等等..)
-
OTOH,我会忽略所有关于地址计算和 sizeof 的东西。 C,有这个不变量:
x[y] == *(x+y)。因此,x+y == &*(x+y) == &x[y]. -
@MattVaughan 这次你搜索了半个小时(不太可能那么长),但是你学会了如何更好地搜索,所以你的下一个问题需要更少的时间,下一个问题甚至更少,等等。最终,在线查找已发布的解决方案所花费的时间比实际输入您的问题所花费的时间更少。另请注意,没有人想一遍又一遍地回答(或通读)同一个问题(可能有细微的变化)(然后是已经提到的网站混乱)。
-
如果您查看该线程中的第 5 个答案,它会链接到 stackoverflow.com/questions/394767/pointer-arithmetic 并提供更多答案。其中一些答案又链接到具有更多答案的其他线程。另外,请注意 SO 不是 forum,它是一个 repository。当人们提出问题只是为了节省自己的研究时间时,这种区别很重要。