Tag: 后增量

printf中的预增量和后增量

int main() { int value = 4321; int *ptrVal = &value; printf(“%d %d”,++value,(*(int*)ptrVal)–); return 0; } 在上面的print语句中,预增量/后增量如何工作? 为什么回答4321 4321?

你可以在c中的同一个语句中的同一个变量上有一个递增器和一个递减器

是 –foo++; C中的有效声明? (它会编译/运行)是否有任何实际应用? 很抱歉在编辑中更改了问题,但我发现了一些问题。 根据我的C ++编译器(Visual Studio 2010): –++foo; 是一个有效的命令,但 foo–++; 不是。 这有什么理由吗?

K&R似乎更喜欢预增量

我正在通过K&R工作,现在正在练习1-16。 我发现到目前为止,书中只使用了预增量。 大多数其他教程书籍和我见过的源代码往往倾向于后增量,除非有明显的影响,例如while循环等。 这是K&R的风格或技术考虑吗? 或者我只是需要进一步完成本书以获得我的答案?!

C和JAVA中递增递减运算符的差异

请考虑以下声明: int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; 根据我的逻辑,n应该是10.但是我在c中得到不同的输出(输出是7)但是在java中我得到的预期结果是10.在增量和减量运算符在c中工作的方式有什么不同和java。 这是我的确切c和java代码: #include int main() { int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; printf(“%d”,n); getch(); return 0; } 输出的Java代码:10 public class HelloWorld{ public static void main(String []args){ int a[]={1,2,3,4,5,6,7,8}; int i=0,n; i=0; n=a[++i] + i++ + a[i++] […]

对于指针,++与+ = 1相同吗?

我想重构我的一些旧C代码,我很好奇我是否可以用ptr += 1替换所有ptr++ ,其中ptr是一些指针,而不改变任何行为。 以下是K&R第5.3节中我的意思的一个例子: /* strlen: return length of string s*/ int strlen(char *s) { int n; for (n = 0; *s != ‘\0’; s++) n++; return n; } 当我用s += 1替换s++时,我得到了相同的结果,但我想知道所有类型是否都是这种情况。 我也对int进行了测试: int size = 10; int *int_array = (int*)calloc(size, sizeof(int)); for (int i = 0; i < size; i++) int_array[i] = i; […]

C / C ++后增量/ -decrement和函数调用

可能重复: 未定义的行为和序列点 我正在使用microsoft visual c ++。 请看以下示例: int n = 5; char *str = new char[32]; strcpy(str, “hello world”); memcpy(&str[n], &str[n+1], 6+n–); printf(str); // output is “hell world” 所以不可思议的是,我的编译器生成的代码首先递减n然后执行memcpy。 以下来源将完成我预期会发生的事情: int n = 5; char *str = new char[32]; strcpy(str, “hello world”); memcpy(&str[n], &str[n+1], 6+n); n–; printf(str); // output is “helloworld” 首先,我试着向自己解释一下。 最后一个参数首先被压入堆栈,因此可以先对其进行求值。 但我真的相信后递增/递减保证在下一个分号后进行评估。 所以我运行了以下测试: […]

了解有关i ++和i = i + 1的更多信息

我想知道两种增量forms之间是否存在差异。 一些链接说i ++比i = i + 1更快; 另外作为人之一,我的观察对于汇编代码也是一样的。 请检查图像,其中汇编代码对于i ++和i = i + 1都是相同的 – 还有另一个链接说以前曾经是真的,增量运算符比加法和赋值更快,但现在编译器优化i ++和i = i + 1相同。 是否有任何官方文件/文件我们可以参考确认什么是正确的? (我通常会使用信用卡和一个人在stackoverflow上接受的答案数量。在我提供的链接上找不到任何此类信息)。

C语言有预增量和后增量的历史原因是什么?

(注意:我不是在询问预增量与后增量的定义,或者它们是如何在C / C ++中使用的。因此,我不认为这是一个重复的问题。) C的开发人员(Dennis Ritchie等人)出于很好的理由创建了增量和减量运算符。 我不明白为什么他们决定创造前后增量/减量的区别? 我的感觉是,当C开发时,这些运算符比今天更有用。 大多数C / C ++程序员使用其中一种,而其他语言的程序员今天发现这种区别是奇怪和令人困惑的(注意:这完全基于轶事证据)。 他们为什么决定这样做,以及计算上发生了什么变化,这种区别今天没那么有用? 为了记录,可以在C ++代码中看到两者之间的差异: int x = 3; cout << "x = 3; x++ == " << x++ << endl; cout << "++x == " << ++x << endl; cout << "x– == " << x– << endl; cout << "–x == " << […]

关于岗位增量

int get() { static i = 1; return i++; } int main(int argc, char *argv[]) { printf(“%d %d %d\n”, get(), get(), get()); return 0; } 输出:3 2 1(顺序取决于编译器) 问题:但为什么增量返回前的值是静态变量(文件范围)。 post / pre increment的拇指规则是什么? 我从来没有弄错。 请帮忙。 好吧,让我更具体一点,我读到的所有例子都是, a = i++; or a = ++i; a = i++; or a = ++i; 这些是递增然后赋值或赋值然后递增的表达式。 但这些表达是什么样的, return i++; func(a++); […]

这是C中未定义的行为吗?

我在gcc上运行我的C代码来理解前/后增量运算符。 然而,我看到的结果并不是我的预期。 就像第6行一样,因为我是5,它应该是 8 7 6 5 5 但它是8 7 6 5 8 然后到达最后一行,显示14 14 14 14 。 有人可以解释一下这种行为。 我原以为14 14 13 12 这个编译器是否依赖? 是否未定义序列点上printf函数的beahviour? #include int main() { i = 5; printf(“%d %d %d %d %d \n”, i, i++, i++, i++, i); printf(“%d \n”, ++i); printf(“%d \n”, ++i); printf(“%d \n”, ++i); printf(“%d %d %d […]