【发布时间】:2015-03-12 02:29:45
【问题描述】:
下面是查找指向数组的指针的简单代码。
#include <stdio.h>
typedef unsigned short int Ushort;
void InputYear(char (*name), Ushort *year);
int main(int argc, const char * argv[]) {
Ushort year;
char name[11] ;
InputYear(name, &year);
printf("MY name is %s", message);
printf("%d", year);
}
void InputYear(char (*name), Ushort *year){
printf("please enter your name and year");
scanf("%s %hd" ,name, year);
}
但问题是,如果我更改char name[11] --> char *name 为什么它不起作用?
错误是“分段错误:11”。
我了解到数组的名称也是一个指针,表示第一个数组值的地址。在这方面,我认为char name[11] 和char *name 是一样的。
或者有什么我不知道的吗?
和额外的问题:
int a = 1;
int* b = &a;
printf("%s", *b);
它有效。关键是 printf 的第二个参数是值本身,而不是地址。但是,
char hi[11] = "message";
printf("%s", hi);
在这种情况下, printf 的第二个参数是地址本身,而不是上面的值。它是什么??为什么会这样?
非常感谢!
【问题讨论】:
-
printf("%s", *b);起作用的事实是一个有争议的问题,因为它是未定义的行为。至于第一个问题,char name[11]自动为 11 个chars 分配空间,而char *name只是声明了一个指针——它实际上并没有指向任何东西。 -
printf("%s", *b)不“工作”,也许你的意思是%d -
尝试阅读C FAQ章节