将 (*abc) + 15 未定义,因为数组只有 10 个字符长

would (*abc) + 15 be undefined since the array is only 10 chars long?

本文关键字:数组 字符 因为 abc 未定义      更新时间:2023-10-16

我正在准备面试,我想解决这个问题,因为我在不同的场景中见过它:

Char abc[10] ; 
Strncpy(abc,”abcdefghijklmn”,10); 

以下数据类型和值是什么

Abc ->abcdefghij
*abc -> char a
Abc[5] -> char f 
Abc+4  -> char e
&abc[5] -> address of char f ?
(*abc)+15 -> undefined ?

在每一行旁边,您都有我的答案.我做对了吗?如果没有..你能帮忙吗?

编辑:是的,伙计们,我从文档中复制了问题,因此格式不正确。我没有费心使用小写。感谢您的输入!(*abc) + 15 现在有意义了。不知道为什么我认为它会过去。它显然是字符"a"+ 15。谢谢!

abc ->abcdefghij

正确。请注意,数组不是以 null 结尾的,因此不应传递给对 c 字符串进行操作的函数。

*abc -> char a
abc[5] -> char f

正确。

abc+4  -> char e

不。它是e字符的地址。

&abc[5] -> address of char f ?

正确。

(*abc)+15 -> undefined ?

不。它是字符a的值,转换为整数,并递增 15。假设一个字符集(例如所有最常见的字符集),其中英文字母表的字母按顺序排列,那么它是该字母表的第 16 个小写字母的代码,p。在大多数情况下,这将是数字 112。

简洁的面试问题。我会选择:

Abc -> &abc[0] which points to 'a'
*abc -> *(&abc[0]) = 'a'
Abc[5] -> *(&abc[5]) = 'f' 
Abc+4  -> &abc[4] which points to 'e'
&abc[5] -> address of char 'f' ?
(*abc)+15 -> *(&abc[0]) = 'a' + 15 = 'p'

您有很多错别字:)似乎您从MS Word复制并粘贴了此测试:)而不是

Char abc[10] ; 
Strncpy(abc,”abcdefghijklmn”,10); 

应有

char abc[10] ; 
strncpy( abc, "abcdefghijklmn", 10 ); 

再次代替

Abc ->abcdefghij

应有

abc ->abcdefghij

考虑到现在数组 abc 不是零端接的。

至于这个说法

(*abc)+15 -> undefined ?

那么它只是为了获得它的价值。你已经写过了

*abc -> char a

因此,在第一个表达式中,( *abc )可以替换为其值'a',您将获得

'a' + 15 -> 'p'

更准确地说,表达式"a"+ 15 的值将是类型 int 的对象,该值对应于字符"p"的 ASCII 代码。

还有这个表达式

abc+4  -> char e

相当于

&abc[4]

也就是说,它的值是数组中"e"的地址

abc+4  -> address of char e