2019西ポストのLinux関心グループは、新しい質問を要約することを満足しています

1.次のコードセグメントは「=」の数を出力しますか?出力を解釈するための知識を適用します。

int main()
{
        for(unsigned int i=3;i>=0;i--)
        {
                putchar('=');
        }
}
 无数个'=',因为无符号数无负,造成死循环。

2.どのように交流を達成するために、次の三つの整数の道を交換するには?

/*(1)*/ int c = a ; a = b ; b = c;
/*(2)*/ a = a - b ; b = b - a ; a = b -a ;
/*(3)*/ a ^ = b ; b ^ = a ; a ^ = b ;
 1.通过引进一个新变量直接赋值,将a与b的值交换;
 2.通过两个变量之间的关系进行运算,达到将a与b值交换的目的;
 3.通过^的异或运算,将a与b进行交换;

3.コードセグメントに示すように関数fを持って、我々はこの機能を実行すると、種類の出力の何をもたらすのだろうか?この関数は、出力が一致しているかどうか、同じプログラムで複数回行われていますか?

void f()
{
	static int a=0;
	int b=0;
	printf("%d,%d",++a,++b);
}
 a会逐步增加,b不变;static局部变量的“记忆性”,是指在函数调用多次时,在第二次调用进入时,能保持第一次调用退出时的值;

4.ブロック以下の出力はどのくらいですか?この現象を説明し、それがより近い関連知識かもしれ言って下さい。

int main(void)
{
	printf("%d\n",printf("Xiyou Linux Group2%d",printf("")));
}
 输出Xiyou Linux Group2019;printf的返回值是你输出的位数;
 printf函数的运行机制为在栈上申请存储空间, 规则为先进后出, 因此printf()表现为参数从右向左运算;

次のコードスニペット、どのような出力を実行5.?その理由を説明し、関連する知識を記述してみてください。

int main(int argc, char *argv[])
{
	char ch = 255;
	int d = a + 1;
	printf("%d %d",ch,d); 
}
 -1 "a+1"的值;
 计算机中, 数字存其补码, 255的原反补都是1111 1111,以char来看1111 1111,原码为10000001;为-1;   

6.次のコードセグメントを実行し、どのような出力を生成するのだろうか?出力説明するための、コードと手動でくださいは、Tの値を計算します。

int main(int argc, char *argv[])
{
	char x=-2,y=3;
	char t=(++x)|(y++);
	printf("x=%d,y=%d,t=%d\n",x,y,t);
	t=(++x)||(y++);
	printf("x=%d,y=%d,t=%d\n",x,y,t);
}
 x=-1,y=4,t=-1  
 x=0,y=5,t=1
 |:二进制''或"(有1是都是1;都是0才是0)11111111  |  00000100  =  11111111->原码:10000001=-1;
 ||:逻辑或;因为其中有一个为真,所以输出1;

7.次のコードスニペットの出力は何ですか?その結果は、出力の尺度でありますか?

#define X a+b
int main()
{
	int a=1,b=1;
	printf("%d\n",X*X);
 } 
 结果为3;因为在编译时候,只做简单替换

8.それぞれの次のスニペットの効果を説明します。

int val = 2018;
int *pi = 2019;
pi = &val;
*pi = 0;
 定义一个变量val为2018;将pi的地址改为2019;将val的值存在pi中;再将pi的地址赋为0;

9.次のプログラムセグメントの実行、および「XiyouのLinux」を入力し、プログラムの出力は何ですか?理由を説明してください。

int main()
{
	char *p=(char *)malloc(sizeof(char) * 20),*q=p;
	scanf("%s %s",p,q);
	printf("%s %s\n",p,q);
}
 结果为Linux Linux;
 p 指向开辟的20个 char 类型的空间,将 p 赋值给 q ;p 和 q 都是指向那块动态开辟的空间,指向的为同一块内存空间,输入 adc ,p 所存储的数据为 abc 。因为q 与 p 指向同一块空间,q 也指向 abc 。 再给 q 赋值,将 def 输入给 q 。q = p ,def 这时就将 adc 给覆盖掉了。

10.次のプログラムの実行、一致出力の各実行の結果は、出力を整理すると解釈します。

int main()
{
	int a[4]={2,0,1,9};
	printf("%p %p\n",a,&a);
	printf("%p %p\n",a+1,&a+1);
}
 000000000062FE10 000000000062FE10
 000000000062FE14 000000000062FE20
 第一行都指向数组的开头;第二行第一个是数组加一个int类型的空间,第二个是是增加整一个数组的地址;
リリース元の2件の記事 ウォンの賞賛0 ビュー24

おすすめ

転載: blog.csdn.net/weixin_45672701/article/details/104132896