首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

今天遇到的面试题 给大家分享一下

2012-06-22 
今天遇到的面试题 呵呵呵呵 给大家分享一下主考官说:你知道函数名 和 变量名 占多少字节吗 (变量名 不是内

今天遇到的面试题 呵呵呵呵 给大家分享一下
主考官说:你知道函数名 和 变量名 占多少字节吗 (变量名 不是内容)
我:但是还真蒙了,还从来没听说过,不知道是自己水平低,还是他的问题有问题,呵呵 应该是我的问题吧还真没有听说过
我在网上搜了 都没这个答案,呵呵在这里只能请问大家了 

还有一段代码是:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main(){
char*src="hello,world"; 
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);
char* d = dest;//
char* s = src[len];//这里有问题
 while( len-- != 0 )
d++=s--;//这里也有问题,但不知道为什么
printf("%s",dest);//在这里 会出现乱码
return 0;

如果换成这样:
while( len-- != 0 )
d=s--;//这里也有问题,但不知道为什么
printf("%s",dest);//在这里 会出现乱码
printf("%s",d);//在这里不会出现乱码 

dest和 d 不是指向的同一个地址空间吗 为什么会出现这样 请高手指教




[解决办法]

C/C++ code
int main(int argc, char* argv[]){    char*src="hhello,world";      int len = strlen(src);    char * dest =(char*)malloc(len+1);    char* d = dest;//    dest[len]='\0';    char* s;    len--;    s= src+len;//这里有问题    while( len >= 0 ){        *d++=*s--;        len--;    }    //dest[3]='\0';    printf("%s  %d\n",dest,len);    return 0;}
[解决办法]
注意:
1、要给字符串的结尾'\0'分配空间:char * dest =(char*)malloc(len+1);
2、如果不执行len--,src[len]='\0';
3、char *s=src[len];//不正确,src[len]取得的是数组src在len位置存放的字符,而不是地址,应该是s=&src[len]或s=src+len
4、d++=s--;//不正确,这样写就成了地址运算了,而不是改变地址中的值
5、判断len!=0使src中src[0]这个字符未赋值给dest
[解决办法]
函数名和变量名在程序中应该是地址
[解决办法]
你没有考虑字符串结束符
[解决办法]
d为指向指针的指针
[解决办法]
函数名是一个地址,32位系统中是4个字节。

对于变量名,那要看是直接变量还是间接变量。

32位系统中,间接变量都是地址,自然是4个字节。直接变量要根本具体类型来确定了。
[解决办法]
我觉得这道题目出的挺好
[解决办法]
楼主的程序主要有以下几个方面的问题:
1、未考虑字符串结束符:为dest分配空间应该多分配一个字符:char * dest =(char*)malloc(len+1);
2、将一个字符(src[len],值为'\0',数字应该是0)赋值给一个地址,结果指针s指向地址0,应该先将len减掉1,让其偏移量指向一个实际字符(而不是'\0'),再将偏移地址赋值给指针s:
len--;s= src+len;或s=&src[len];
3、while(len-- != 0)使src字串首字符'h'的赋值被排出
4、d++=s--;将d的指向地址改变,而不是将指向地址中的值改变,这样实际dest指向的地址空间中的值未发生变化,为不可知的值。
5、不要忘记将dest最后一位设为'\0'。
正确的程序参照1楼代码。

热点排行