下面有一个代码,我在理解代码的逻辑时遇到了一个非常严重的问题.
#include <stdio.h>
#include <stdlib.h>
int main(void )
{
int i = 1 ;
printf("\n%d %d %d %d\n",++i,i++,i++,++i) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
我在linux发行版下使用名为Mandriva的gcc编译器.在上面提到的我在printf语句中使用了一个变量的pre和post增量.我应该得到的输出是2 2 3 5,但我得到一个不同的输出.请帮我这个代码.
我觉得这段代码很难.
这是我的代码,我需要澄清此代码的输出:
#include <stdio.h>
int main(void )
{
char name1[10] = "Rajan" , name2[10] = "Rajan" ;
char *name3 = "Chennai" , *name4 = "Chennai" ;
printf("\nAddress for name1 and name2 : %p and %p",name1,name2) ;
printf("\nAddress for name3 and name4 : %p and %p",name3,name4) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是
Address for name1 and name2 : 0x7fff9e6cbe10 and 0x7fff9e6cbe20
Address for name3 and name4 : 0x400760 and 0x400760
Run Code Online (Sandbox Code Playgroud)
这里的值的地址name1和name2是不同的,因为我分配了两个不同的阵列.但在的情况下name3和name4,地址是相同的,为什么不一样?它不会创建不同的内存并为值分配名称Chennai?为什么它指向相同的内存?
考虑到我有两个线程:THREAD 1和THREAD 2.我只想在它们之间进行通信.THREAD 1包含一个存储在指针中的值,THREAD 2需要在该线程周围访问指针值.
根据我的理解,我认为我们可以直接取消引用从一个线程到另一个线程的指针.但我朋友的建议是我只通过IPC机制访问该值,而不是我的建议.
请对此发表评论.什么是最好的方法,为什么......?
#include <stdio.h>
void call(int n )
{
if ( n > 0 )
{
call(--n) ;
printf("\n%d",n) ;
call(--n) ;
}
}
int main(void )
{
int a = 3 ;
call(a) ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
在上面提到的代码中,我很难理解它背后的逻辑.我得到0 1 2 0作为输出.为什么?