将 (*abc) + 15 未定义,因为数组只有 10 个字符长
would (*abc) + 15 be undefined since the array is only 10 chars long?
我正在准备面试,我想解决这个问题,因为我在不同的场景中见过它:
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
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 按字符值访问int数组
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- C++ 带结构的数组字符
- 数组字符包含量超出预期
- 读取文件并添加到数组字符
- 如何在Qt中更改或替换数组字符
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?
- 井字棋数组字符错误
- 分割数组字符