以下声明有什么区别?常量指针vs常量值指针
char * const a;
const char * a;
为了理解上的差异,我写这个小程序:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
char a = 'x';
char b = 'y';
char * const pc1 = &a;
const char * pc2 = &a;
printf ("Before\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc2);
*pc1 = b;
/* pc1 = &b; */
/* *pc2 = b; */
pc2 = &b;
printf ("\n\n");
printf ("After\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc2);
return EXIT_SUCCESS;
}
我编译的程序(用gcc 3.4)并运行它。输出突出显示差异相当好:
Before
pc1=ffbfd7e7
*pc1=x
pc2=ffbfd7e7
*pc2=x
After
pc1=ffbfd7e7
*pc1=y
pc2=ffbfd7e6
*pc2=x
但是,我不得不编写小程序来获得答案。如果我远离机器(例如面试),我无法回答这个问题。
有人可以通过评论上面的例子解释const
关键字的运作方式吗?
更完整的答案如下,但我喜欢认为'const'绑定到下一个标记'。所以在'char * const a'中是'a',变量本身是不可修改的。在'const char * a'中,它是指向不可修改的字符。 – davmac 2014-05-20 10:05:48
我认为标题应该像 - “常量指针vs指针”指向一个常量值“ – RBT 2016-09-21 00:23:58