究竟什么是C/C++中的类型转换?编译器如何检查是否需要显式类型转换(并且是否有效)?它是否比较了值所需的空间?如果我有例如:
int a;
double b = 15.0;
a = (int) b;
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,double值需要更多的空间(是8字节?!)而不是整数(4字节).并且两者的内部表示完全不同(在两个/尾数上的补码).那么内部会发生什么?这里的例子非常简单,但在C/C++中有很多类型.
如果我可以将例如FOO转换为BAR,编译器如何知道(或程序员)?
我想知道为什么下面的代码不起作用
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
test = "testingonly";
free(test);
}
Run Code Online (Sandbox Code Playgroud)
在考虑之后,我的假设是首先在内存中为12个字符分配空间,但是下一行中的赋值在堆栈上创建一个char数组,并将其内存地址传递给test.所以free()尝试释放堆栈上不允许的空间.那是对的吗?
那么在堆上保存字符串的正确方法是什么?以下是一种常见的方式吗?
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
strcpy(test, "testingonly");
free(test);
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个PAM模块,它将用户名/密码写入文件,以供其他应用程序进一步处理.我只看到了PAM_AUTHTOK项,但我不确定它是从哪种类型开始的.有人知道这个或其他方式来获取明文密码吗?
我正在使用 fgetc 从文件中读取字符串。因为我不知道字符串有多长,所以我需要为保存数据的数组重新分配空间。为此,我需要知道当前数组何时已满。我不太确定 char 数组在读取字符后是否以空终止。例如,我有一个大小为 8 的数组,fgetc 将给我第 9 个字符。现在数组的大小是8还是9?(8 个字符 + \0 或仅 8 个字符)。有办法测试一下吗?而如果没有\0。当我读完字符串后,我需要自己将它添加到char数组中吗?
如果我们使用反向页表将虚拟地址映射到物理地址,为什么我们会节省内存?如果我们有两个进程都有4个页面,那么我们将在两个不同的表中指向虚拟到物理地址的8个条目:
Process 1:
[0] = 1
[1] = 5
[2] = 63
[3] = 0
Process 2:
[20] = 14
[21] = 55
[22] = 11
[25] = 9
Run Code Online (Sandbox Code Playgroud)
如果我们使用倒置页表,我们只会有一个大表指向它.但在规模上他们是平等的.
2) Inverted page table
[0] = <p1 | 3>
[1] = <p1 | 0>
[5] = <p1 | 1>
[9] = <p2 | 25>
[11]= <p2 | 22>
[14]= <p2 | 20>
[55]= <p2 | 21>
[63]= <p1 | 2>
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用C中的参数回调.以下不起作用.什么是最好的方法来实现它?(传递回调函数的参数)
#include <stdio.h>
void caller(int (*cc)(int a)) {
cc(a);
}
int blub(int a) {
printf("%i", a);
return 1;
}
int main(int argc, char** argv)
{
caller(blub(5));
return 1;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试向函数提供一个char指针,然后用函数填充它,以便调用函数可以使用它.因为它总是在调用函数中给我奇怪的东西,我写了一个关于我所做的简单表示:
#include <stdio.h>
#include <stdlib.h>
void bla(char *t)
{
t = (char*) malloc(5);
if (t != 0) {
t[0] = 'h';
printf("%c\n", t[0]);
}
}
int main(int argc, char **argv)
{
char b[10];
bla(b);
printf("%c\n", b[0]);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我不太确定C传递参数副本是否有事可做.我需要将指针传递给指针,还是有更好的解决方案?
编辑:
对不起的家伙,但我没有得到它.你能看一下这个例子:
#include <stdio.h>
#include <stdlib.h>
void blub(char **t)
{
printf("%d\n", *t);
*t = (char*) malloc(sizeof(char) * 5);
*t[0] = 'a';
*t[1] = 'b';
printf("%d\n", *t);
printf("%d\n", *t[0]);
printf("%d\n", *t[1]);
}
int main(int argc, char **argv)
{
char *a;
blub(&a); …Run Code Online (Sandbox Code Playgroud)