我遇到了以下C拼图:
问:为什么以下程序会在IA-64上发生段错误,但在IA-32上运行良好?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道int64位机器的大小int可能与指针的大小不同(可能是32位,指针可能是64位).但我不确定这与上述计划有什么关系.有任何想法吗?
我今天被问到这个面试问题!! (这是一个非常尴尬的电话采访..):
具有虚函数的类的vtable与具有纯虚函数的类有什么区别?
现在,我知道C++标准没有指定关于vtable的任何内容,甚至没有指定v-table的存在......从理论上讲,答案是什么?
我脱口而出,具有纯虚函数的类可以具有vtable,并且其纯虚函数的vtable条目将指向派生类实现.这个假设是否正确?我没有得到面试官的肯定答复.
假设的编译器是否会为仅具有纯虚函数的类创建vtable?如果类包含带定义的纯虚函数怎么办?(如:http://www.gotw.ca/gotw/031.htm).
我被问到这个采访问题(C++,algos)并且不知道如何解决它.
给定一个数组说Arr [N]包含N个不同点的笛卡尔坐标,计算三元组的数量(Arr [P],Arr [Q],Arr [R]),使得P <Q <R <N并且得到点Arr [ P],Arr [Q],Arr [R]共线(即位于同一直线上).
有任何想法吗?我可以使用什么算法?
在一次采访中,我被要求编写一个实现,strcpy然后修复它,以便它正确处理重叠的字符串.我的实现如下,非常天真.如何修复它以便:
char* my_strcpy(char *a, char *b) {
if (a == NULL || b == NULL) {
return NULL;
}
if (a > b) {
//we have an overlap?
return NULL;
}
char *n = a;
while (*b != '\0') {
*a = *b;
a++;
b++;
}
*a = '\0';
return n;
}
int main(int argc, char *argv[])
{
char str1[] = "wazzupdude";
char *after_cpy = my_strcpy(str1 + 2, str1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
因此,基于@ Secure的 …
在x = x + 1,x评估两次?如果是这样,这意味着什么x += 1,x只评估一次?两个表达式如何根据编译器中间代码进行评估?
例如,x++可能意味着:获取位置x,将内容加载x到寄存器中,并增加x内存中的值.
另外我读过,x += 1当x它不是一个简单的变量,而是一个涉及数组的表达式时很有用.任何想法为什么会这样?
我被问到一个面试问题,以找出阵列元素中不同绝对值的数量.我想出了以下解决方案(在C++中),但是面试官对代码的运行时效率不满意.
for循环执行A.size()时间.但是我不确定STL的效率std::find(在更糟糕的情况下,它可能是O(n)这样的代码O(n²)吗?代码是:
int countAbsoluteDistinct ( const std::vector<int> &A ) {
using namespace std;
list<int> x;
vector<int>::const_iterator it;
for(it = A.begin();it < A.end();it++)
if(find(x.begin(),x.end(),abs(*it)) == x.end())
x.push_back(abs(*it));
return x.size();
}
Run Code Online (Sandbox Code Playgroud) 以下程序的输出是什么?为什么?
#include <stdio.h>
int main()
{
float a = 12.5;
printf("%d\n", a);
printf("%d\n", *(int *)&a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的编译器打印0和1095237632.为什么?
面试问题:
提出一个数据结构,它保存从0到n - 1的元素,并支持O(1)时间内的所有以下操作:初始化,元素插入,元素删除,查找元素,删除所有元素.
哈希表(假设没有冲突,即最好的情况)将支持在O(1)中插入和搜索.我不确定删除虽然......任何想法?
位反转
我发现这个代码用于反转整数x中的位(假设为32位值):
unsigned int
reverse(register unsigned int x)
{
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return((x >> 16) | (x << 16));
}
Run Code Online (Sandbox Code Playgroud)
我无法理解此代码背后的逻辑/算法.所有神奇数字的目的是什么?