我找到了这个例子.
考虑具有32位逻辑地址空间的系统.如果此类系统中的页面大小为4 KB(2 ^ 12),则页表可能包含最多100万个条目(2 ^ 32/2 ^ 12).假设 每个条目由4个字节组成,每个进程可能只需要4 MB的物理地址空间.
每个条目的含义是4个字节,为什么每个进程可能需要最多4 MB的页表空间物理地址空间?
#include <stdio.h>
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (a == --a)
printf("TRUE 2\t");
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个if语句是真的?
输出为:TRUE 1 TRUE 2
这是否由于未定义的行为而发生,因为我将相同的变量与其递减的值进行比较?
#include <stdio.h>
int main()
{
void foo();
printf("1 ");
foo();
}
void foo()
{
printf("2 ");
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
Run Code Online (Sandbox Code Playgroud)
如何在函数内部声明函数?这是否意味着foo()函数只能由main()调用?
#include <stdio.h>
void main()
{
m();
}
void m()
{
printf("hi");
}
Run Code Online (Sandbox Code Playgroud)
产量
hi
警告
main.c:11:10: warning: conflicting types for 'm' [enabled by default]
void m()
^
main.c:7:9: note: previous implicit declaration of 'm' was here
m();
^
Run Code Online (Sandbox Code Playgroud)
为什么这个程序成功运行,即使m()在定义之前被调用?警告的含义是什么?
#include <stdio.h>
#define foo(x, y) #x #y
int main()
{
printf("%s\n", foo(k, l));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
kl
我知道##会连接.从输出看来,它似乎#也是连接.我对么?
如果我是正确的那么##运营商和#运营商之间有什么区别?
#include <stdio.h>
int main()
{
int x = 0;
if (x++)
printf("true\n");
else if (x == 1)
printf("false\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
Run Code Online (Sandbox Code Playgroud)
为什么输出错误?
x++是后增量; 这意味着使用的值x然后递增.如果是这样,那么x=0应该使用,答案应该是真的.
在此程序中,TOTAL_ELEMENTS当不用于for循环时,计算正确.并且第一个printf正确打印.但是,即使循环中的条件为真,第二个printf也无法工作.TOTAL_ELEMENTS回报7.而-1<7-2即-1<5是真实的.那么这里有什么问题?
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
printf("Total= %d\n", TOTAL_ELEMENTS);
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
void main()
{
int k = m();
printf("%d", k);
}
void m()
{
printf("hello");
}
Run Code Online (Sandbox Code Playgroud)
产量
hello5
返回此处的void函数是什么?如果没有printf()则输出为1.这里发生了什么?
为什么字符数是4?
echo abc|wc -c
Run Code Online (Sandbox Code Playgroud)
产量
4
Run Code Online (Sandbox Code Playgroud)
输出应该是3,因为字符数是3.
我们可以将2d数组作为单个指针传递,也可以传递双指针.但在第二种情况下,输出不如预期.那么第二个代码有什么问题?
方法1:
#include <stdio.h>
void print(int *arr, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
printf("%d ", *((arr+i*n) + j));
}
int main()
{
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int m = 3, n = 3;
print((int *)arr, m, n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
方法2:
#include <stdio.h>
void …Run Code Online (Sandbox Code Playgroud)