【发布时间】:2012-12-02 12:33:43
【问题描述】:
以下第一个程序中的声明 *p++ = *source++; 不会导致任何错误,但会导致错误 ISO C++ forbids cast to non-reference type used as lvalue 在第二个程序编译时。为什么会发生这种情况?
-
第一个程序
#include char *my_strcpy(char *destination, char *source) { char *p = destination; while (*source != '\0') { *p++ = *source++; } *p = '\0'; return destination; } int main() { char source[] = "A string to be used for demonstration purposes"; char destination[80]; my_strcpy(destination, source); puts(destination); return 0; } -
第二个节目
#include char source[] = "A string to be used for demonstration purposes"; char destination[80]; int main() { char *p = destination; putchar('\n'); while(*source != '\0') { *p++ = *source++; } *p = '\0'; puts(destination); return 0; }
【问题讨论】:
-
第二个,
source是一个数组。所以source++是非法的。首先,传递给函数的是&source[0],所以函数有一个可以递增的指针。
标签: c compiler-errors iso