4、若有定义:int a[3][4],能表示数组元素a[1][1] ( B)
A *(&a[0]+5)
B *(a[0]+5)
C (*(a+1)[1])
D *(a+5)
解答:a[0]等价于*(a+0)
a[1][1]等价于 * (*(a+1)+1) 或者 (*(a+1))[1] 或者 *((a[1])+1),所以C少了一个括号
*(a[0]+5),中a表示指向一维数组的首地址,步长为16,a[0]表示第一个一维数组,*(a[0]+5),表示第一个一维数组移动五个元素 即位 a[1][1]
5、写出下列sizeof后得到的结果(坑)真实面试题
char *str=”ab\01defg”; sizeof(str) = ?, strlen(str) = ?
char str[]=”abc/tdefg”; sizeof(str) = ?, strlen(str) = ?
分别是4,7和10,9;
答:\01表示的是八进制的\01只算一个字符,sizeof(str),str指针4个字节,strlen(str) = 7
/t和\t不一样,45度/t表示的是两个字符,非45度\t才代表回车,所以sizeof(str)=10(要算上\0),strlen(str)=9
6、只知道一个指针p指向单链表的某一节点,需要删除该节点,请写出实现该过程的伪代码。(该链表没有尾结点,可以使用一个辅助指针q)(思维上的学习)真实面试题
p->date = p->next->date;
q = p->next->next;
free(p->next);
p->next = q;
答:正常情况下删除单向链表的节点要知道要删除的节点的前一个节点,如果只知道要删除的当前节点,可以改变当前节点的数据使其等于下一个节点,然后删除下一个节点(这种只能是下一个节点不为空,并且节点的数据类型要一致)