标签归档:google

google

一道关于指针的Google笔试题

[题目]


下面说法正确的是[]
A.函数foo()不能改变p指向的字符串内容
B.函数foo()不能使指针p指向malloc生成的地址
C.函数foo()可以使p指向新的字符串常量
D.函数foo()可以把p赋值为 NULL.

简单地说,p是一个字符串。

实际上,p是一个普通的指针(可以修改指向),这个指针指向一个不可改变的字符(i.e. 这个指针本身的值是一个字符在内存中存储的地址),这个字符是常字符串”hello”的第一个字符。

const char **pp是一个指针,这个指针指向一个指针’,指针’就是像上述的p那样的指针。函数foo仅接受一个参数,这个参数的值是pp要指向的那个指针自己在内存中的地址(不是那个指针指向的地址),正是由于这个原因,第二句写的是foo(&p),将指针p自己的地址传了进去。此时pp的值就是p的地址,*pp就是p的值,也就是p指向的常字符的地址(或者说常字符串的首地址,因为char*既可以指向字符”又可以指向字符串””,不管指向什么,它都只是存一个字符在内存中的地址,如果指向字符串,那么它存第一个字符的地址,后面的字符是通过指针的加法运算来访问的)。下面依次分析每个选项:

A. 可以通过**pp来读取p指向的字符的值,但是p是指向const char,所以只能读取,不能改变内容,A正确。
B. malloc是从内存中申请空间的函数,它返回申请到的空间的首地址(起始地址)。根据上面的分析,通过为*pp赋值,即可改变p的值,也就是使p的指向。另外,“声明const char* p”的意思不是“p只能指向字符串常量”,而是“不能用p来修改那个字符串”,用普通的char*再指向那个字符串,还是可以修改那个字符串的。换句话说,字符串本身是不带“只读”属性的,是不是只读,在于用户声明的调用方式。例:

又例:

所以foo()能够使p指向malloc生成的地址。B错误。

C. p是指向字符串常量的指针,const修饰的是char,不是char*,所以“只读”的是p指向的那个字符串,而不是p本身。因此,p的指向是可以改变的,可以令它指向其他字符串常量。给*pp赋值即可。C正确。
D. 根据以上分析,可以将p赋值为null(让p指向空)。D正确。

本站PR上升到3

最近有消息称google即将取消PR计算机制。但昨天,PR又进行了大的更新。许多博客都得到了较令人满意的PR值。蓝天下博客的PR也升到了3.

昨天PR还是0,到晚上23:00左右再查询,工具栏PR变成了3,其他的还是0.今天早上再查,哈哈,全都变成了3.

虽然GOOGLE也许要取消pr机制,但这也或多或少的代表着我努力的结果。

自从博客换域名以后,PR一直是0.如今PR升到3,不仅是RP问题,这也代表着谷歌和大家对我的肯定。

我一定会再接再厉,向着更高的高度发展。

百度排名上升飞快

好久没有关注搜索引擎收录情况了,只是不停地blog and blog。看到一篇资讯,说大名鼎鼎的“月光博客”百度排名降到了第3位。于是顺便搜了一下“ltx”结果第4。又搜了“lantianxia”,结果第二。继续搜“蓝天下”,结果第5.再搜“蓝天下-学习生活记录”呢,是第一。真是意料之外啊,我的博客在百度上的排名竟然能这么靠前…… 继续阅读