由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一个指针的面试题
相关主题
c++ 问题一道 C++ 的题。
问一个C的简单问题问一个placement new 和 operator new的问题
求指点一下我写的程序哪部分是C++ syntaxbloomberg电面
大家新年好。 请教一个 c interview question (转载)bloomberg onsite
请教一段小程序Placement new的一个问题
C语言高手帮我看看下面代码,哪里错了啊,谢了菜鸟求救 请大家看看我的代码有没有问题
攒人品 报BB面经看看这道题
给大家看几道C 小程序bloomberg相关的面试题
相关话题的讨论汇总
话题: int话题: val1话题: p2话题: val2话题: 4724120
进入JobHunting版参与讨论
1 (共1页)
h****n
发帖数: 1093
1
给了一段代码,问是干什么的?
void foo(int *p1, int val1, int val2)
{
int *p2, *p3;
p2 = (int *)0x12fec8;
*p2 = val1;
p1 = (int *)*p2;
for (int i=1; i<10; i++)
{
p2 = (int *)0x12fec8;
*p2 = val1;
p3 = (int *)*p2;
val1+=sizeof(int);
*p3 = val2;
}
}
编译跑了一下也没看出这个代码是干啥的。求指教
j*****y
发帖数: 1071
2
感觉是给 一个 int[9] 的 array 里面的每个成员赋值为val2.
这个 array的 起始地址是 (int *)val1

【在 h****n 的大作中提到】
: 给了一段代码,问是干什么的?
: void foo(int *p1, int val1, int val2)
: {
: int *p2, *p3;
: p2 = (int *)0x12fec8;
: *p2 = val1;
: p1 = (int *)*p2;
: for (int i=1; i<10; i++)
: {
: p2 = (int *)0x12fec8;

h****n
发帖数: 1093
3
我特意跑了一下程序
void foo(int *p1, int val1, int val2)
{
int j;
int *p2, *p3;
int * buf1 = (int*)malloc(sizeof(int)*20);
for(int j =0;j<20;j++)
buf1[j] = 1;
p2 = (int *)buf1;
//val1放到0x12fec8地址也就是当前p2指针指向的位置
*p2 = val1;
//把p1指向val1地址所指向的位置
p1 = (int *)*p2;
for (int i=1; i<10; i++)
{
p2 = (int *)buf1;
*p2 = val1;
p3 = (int *)*p2;
val1+=sizeof(int);
*p3 = val2;
}
printf("buf1:");
for(j =0;j<20;j++)
printf(" %d ",buf1[j]);
printf("\n");
}
int main()
{
int i = 1;
int j = 0;
int * buf2 = (int*)malloc(sizeof(int)*20);
for(j =0;j<20;j++)
buf2[j] = 2;
int * buf3 = (int*)malloc(sizeof(int)*20);
for(j =0;j<20;j++)
buf3[j] = 3;
foo(&i, (int)buf2, (int)buf3);
printf("buf2:");
for(j =0;j<20;j++)
printf(" %d ",buf2[j]);
printf("\n");
printf("buf3:");
for(j =0;j<20;j++)
printf(" %d ",buf3[j]);
printf("\n");
getchar();
return 0;
}
结果输出:
buf1: 4724008 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
buf2: 4724120 4724120 4724120 4724120 4724120 4724120 4724120 4724120
47
24120 2 2 2 2 2 2 2 2 2 2 2
buf3: 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
还是看不懂这个是干啥的。。请指教

【在 j*****y 的大作中提到】
: 感觉是给 一个 int[9] 的 array 里面的每个成员赋值为val2.
: 这个 array的 起始地址是 (int *)val1

y********9
发帖数: 130
4

2L说的对啊 for里面做的就是pointer加法 地址每次增加一个int的量

【在 j*****y 的大作中提到】
: 感觉是给 一个 int[9] 的 array 里面的每个成员赋值为val2.
: 这个 array的 起始地址是 (int *)val1

h****n
发帖数: 1093
5
明白了。。。多谢。。指针看得头晕,程序结果也验证了你的说法

【在 j*****y 的大作中提到】
: 感觉是给 一个 int[9] 的 array 里面的每个成员赋值为val2.
: 这个 array的 起始地址是 (int *)val1

p*****2
发帖数: 21240
6
为什么程序敢用这个地址0x12fec8
U***5
发帖数: 2796
7
同疑惑中。

【在 p*****2 的大作中提到】
: 为什么程序敢用这个地址0x12fec8
j*****y
发帖数: 1071
8
有什么 特别的吗?

【在 p*****2 的大作中提到】
: 为什么程序敢用这个地址0x12fec8
U***5
发帖数: 2796
9
这样初始化出来的地址是在stack上还是在heap上?
感觉很二啊。

【在 j*****y 的大作中提到】
: 有什么 特别的吗?
p*****2
发帖数: 21240
10

不能随便指定内存地址吧。这个内存要是别人在用的怎么办?

【在 j*****y 的大作中提到】
: 有什么 特别的吗?
相关主题
C语言高手帮我看看下面代码,哪里错了啊,谢了一道 C++ 的题。
攒人品 报BB面经问一个placement new 和 operator new的问题
给大家看几道C 小程序bloomberg电面
进入JobHunting版参与讨论
U***5
发帖数: 2796
11
vs2010上跑了跑,第6行立马access violation.

【在 p*****2 的大作中提到】
:
: 不能随便指定内存地址吧。这个内存要是别人在用的怎么办?

p*****2
发帖数: 21240
12

感觉AV挺正常的。不是自己的memory。

【在 U***5 的大作中提到】
: vs2010上跑了跑,第6行立马access violation.
h****n
发帖数: 1093
13
最近在看嵌入式的面试题 嵌入式里面经常需要针对某个硬件地址作赋值所以这里就考
这个 不过这段代码故意写的乱来考察基本功

为什么程序敢用这个地址0x12fec8
★ Sent from iPhone App: iReader Mitbbs Lite 7.56

【在 p*****2 的大作中提到】
: 为什么程序敢用这个地址0x12fec8
b*****n
发帖数: 482
14
embedded system 和 lower level driver 什么的常常会用特定地址。不过通常要有个
global memmap 以确保没有地址冲突。就这段代码而言只是看指针操作清不清楚而已。
B*******1
发帖数: 2454
15
是的,很正常。

【在 b*****n 的大作中提到】
: embedded system 和 lower level driver 什么的常常会用特定地址。不过通常要有个
: global memmap 以确保没有地址冲突。就这段代码而言只是看指针操作清不清楚而已。

k***x
发帖数: 6799
16
就是从指定外设的寄存器读/写数据到内存

【在 h****n 的大作中提到】
: 最近在看嵌入式的面试题 嵌入式里面经常需要针对某个硬件地址作赋值所以这里就考
: 这个 不过这段代码故意写的乱来考察基本功
:
: 为什么程序敢用这个地址0x12fec8
: ★ Sent from iPhone App: iReader Mitbbs Lite 7.56

b****g
发帖数: 192
17
函数一共三个参数
貌似是执行完就在地址0x12fec8那里存一个整数,值为val1。
又在地址为val1的地方连着整出来9个int那么,这9个地方存的都是整数val2.
但是我不懂为什么p1也是参数呢?
在函数内部,p1指向的是地址为val1的地方,这里存着第一个val2.
那函数执行完了,p1作为形参指向的地方就可能不是地址val1啦,
那位什么还要把p1作为函数参数呢?
函数里面p1从来就没出现在等号右边,
p1出现在等号左边就一次,也不带型号,所以也不能传值啊。
那这个p1就毫无用处,等于说函数执行完了,函数外的p1还无改变,*p1也无改变。
难道出现这个p1就是为了考考动不动指针?

【在 h****n 的大作中提到】
: 给了一段代码,问是干什么的?
: void foo(int *p1, int val1, int val2)
: {
: int *p2, *p3;
: p2 = (int *)0x12fec8;
: *p2 = val1;
: p1 = (int *)*p2;
: for (int i=1; i<10; i++)
: {
: p2 = (int *)0x12fec8;

p*****2
发帖数: 21240
18
这样呀。上边几位大牛能谈谈embeded的职业前景吗?
h****n
发帖数: 1093
19
感觉你说的对,p1完全没啥用处,出了函数p1的值不会被改变
0x12fec8地址存的是9个连续int的最后一个的地址
可能是用来便于下一次连续放9个val2的操作吧
这个题有个follow up说怎么精简代码,我瞎写了一个如下
void foo(int val1, int val2)
{
int step = sizeof(int);
for(int i=0;i<9;i++)
{
*((int *)val1) = val2;
val1 += step;
}
*((int *)0x12fec8) = val1 - step;
}

【在 b****g 的大作中提到】
: 函数一共三个参数
: 貌似是执行完就在地址0x12fec8那里存一个整数,值为val1。
: 又在地址为val1的地方连着整出来9个int那么,这9个地方存的都是整数val2.
: 但是我不懂为什么p1也是参数呢?
: 在函数内部,p1指向的是地址为val1的地方,这里存着第一个val2.
: 那函数执行完了,p1作为形参指向的地方就可能不是地址val1啦,
: 那位什么还要把p1作为函数参数呢?
: 函数里面p1从来就没出现在等号右边,
: p1出现在等号左边就一次,也不带型号,所以也不能传值啊。
: 那这个p1就毫无用处,等于说函数执行完了,函数外的p1还无改变,*p1也无改变。

n***e
发帖数: 723
20
感觉你原贴的代码是实际工作的时候凑出来的。如果没有那个p1,可能p2会直接被编译
器optimize掉。
仅仅是感觉。

【在 h****n 的大作中提到】
: 感觉你说的对,p1完全没啥用处,出了函数p1的值不会被改变
: 0x12fec8地址存的是9个连续int的最后一个的地址
: 可能是用来便于下一次连续放9个val2的操作吧
: 这个题有个follow up说怎么精简代码,我瞎写了一个如下
: void foo(int val1, int val2)
: {
: int step = sizeof(int);
: for(int i=0;i<9;i++)
: {
: *((int *)val1) = val2;

1 (共1页)
进入JobHunting版参与讨论
相关主题
bloomberg相关的面试题请教一段小程序
请问以下程序运行结果C语言高手帮我看看下面代码,哪里错了啊,谢了
C++问题3攒人品 报BB面经
C++相关的面经给大家看几道C 小程序
c++ 问题一道 C++ 的题。
问一个C的简单问题问一个placement new 和 operator new的问题
求指点一下我写的程序哪部分是C++ syntaxbloomberg电面
大家新年好。 请教一个 c interview question (转载)bloomberg onsite
相关话题的讨论汇总
话题: int话题: val1话题: p2话题: val2话题: 4724120