我在C初学者,比方说,我有这样的代码:s ++和* s ++有什么区别吗?
#include <stdio.h>
void test(char *t)
{
t++;
*t = 'e';
}
void main()
{
char a[] = "anto";
printf("%c\n",a[1]);
test(a);
printf("%c\n",a[1]);
}
这是示例代码,当我搞清楚指针如何工作。根据我的声明:
t++;
在上面的代码
将1
char
在调用函数test
增加阵列a
的地址。好吧,据我所知,*
用于检索指针指向的对象值。
但是,很奇怪,当我改变t++
到
*t++;
我像以前一样得到同样的输出。我完全同意这一点,上面的说法 *t++;
应该改变内容只知道,根据运营商的定义*
。
但是这又改变了地址t
。怎么来的?我在哪里弄错了这个概念?
预先感谢
注意:始终在启用警告的情况下编译,例如'gcc -Wall'。 *阅读并注意*这些警告 – 2012-04-03 11:35:56
IIRC在空指针上做数学只是有一个未定义的结果,而解引用空指针有未定义的行为。所以有区别,但只有t为空时才显示出来。 – harold 2012-04-03 11:41:15
@PaulR:谢谢你的建议。 – 2012-04-03 11:44:30