- 请试着解释其输出。
int main(int argc , char *argv[]) {
unsigned char a = 255;
char ch = 128;
a -= ch;
printf("a = %d ch = %d\n", a, ch);
}
结果
解析:a为无符号其二进制 11111111 减去b :01111111
为1000000 其值为127
所以第一个打印出的数字为127
ch=128 char类型最高只能存127 128的补码等同-128
所以第二个打印的数字为-128
#include <stdio.h>
int main(int argc, char *argv[]) {
char *str = "Xi You Linux Group 20";
printf("%d\n", printf(str));
return 0;
}
结果
解析:
printf函数返回值为输出的字符个数
#include "stdio.h"
int i = 2;
void func() {
if (i != 0) {
static int m = 0;
int n = 0;
n++;
m++;
printf("m = %d, n = %d\n", m, n);
i--;
func();
} else {
return;
}
}
int main(int argc, char *argv[]) {
func();
return 0;
}
解析;
本题目考察的是static关键字 对变量的作用
普通局部变量会在函数调用结束释放
但静态局部变量不会
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
#include <stdio.h>
int main(int argc, char *argv[]) {
char ch = 'A';
int i = 65;
unsigned int f = 33554433;
*(int *)&f >>= 24;
*(int *)&f = *(int *)&f + '?';
printf("ch = %c i = %c f = %c\n", ch, i, *(int *)&f);
return 0;
}
解析:
unsigned int f = 33554433; //二进制为10000000000000000000000001
右移24 为10 值为2
2+’?’=65 //?的ASCII值为63
#include<stdio.h>
int main(int argc, char *argv[]) {
int a[2][2];
printf("&a = %p\t&a[0] = %p\t&a[0][0] = %p\n", &a, &a[0], &a[0][0]);
printf("&a+1 = %p\t&a[0]+1 = %p\t&a[0][0]+1= %p\n", &a + 1, &a[0] + 1,
&a[0][0] + 1);
return 0;
}
a代表a[0]的地址
a[0]代表数组a的a[0]的第一个元素a[0][0]的首地址+1等于加一列
&a代表数组a的首地址+1等于加一个数组的长度
#include "stdio.h"
#include"string.h"
int main(int argc, char *argv[]) {
char str[] = "XiyouLinuxGroup";
char *p = str;
char x[] = "XiyouLinuxGroup\t\106F\bamily";
printf("%zu %zu %zu %zu\n", sizeof(str), sizeof(p), sizeof(x), strlen(x));
return 0;
}
16:1个char1字节15个字符+’\0’ =16
8:64位机器 指针8字节
25:24字符+’\0’
24:strlen统计 24字符不加’\0’;
#include <stdio.h>
int add(int *x, int y) { return *x = (*x ^ y) + ((*x & y) << 1); }
int a;
int main(int argc, char *argv[]) {
int b = 2020;
if (add(&b, 1) || add(&a, 1)) {
printf("XiyouLinuxGroup%d\n", b);
printf("Waiting for y%du!\n", a);
}
if (add(&b, 1) && a++) {
printf("XiyouLinuxGroup%d\n", b);
printf("Waiting for y%du!\n", a);
}
return 0;
}