【发布时间】:2021-11-18 06:44:03
【问题描述】:
我写了以下c代码:
#include <stdio.h>
#include <stdlib.h>
void func1(char *arr){
printf("%d\n",arr[0]);
printf("%d\n",arr[1]);
return;
}
int main () {
char a[6] = "hello";
printf("%p\n",a);
printf("%p\n",&a);
func1(a);
return 0;
}
当我执行这段代码时,我得到以下输出
0x7fff5a7323e2
0x7fff5a7323e2
104
101
以下是我的疑问:
- 为什么
arr[1]的值小于arr[0],这些值是多少? - 假设给定 0 到 1073741823 是有效的内存范围,我们必须检查传递给 func1 的数组是否在有效范围内,然后如何检查。
【问题讨论】:
-
在
printf,a的类型为char *,&a的类型为pointer-to-array-ofchar[6](正式类型char (*)[6])。它们的地址相同,但类型不同。 -
打印指针值实际上是您应该转换值的情况之一 (
printf("%p\n", (void *) a);)