2013-12-08 129 views
0

我写了一个测试程序,这些指令:ç指针引用

char *p; 

然后

p="gibberish"; 

去然后再打印数p作为如下

printf("%s\n", p); 

,我得到了 “胡言乱语”由于p地址没有初始化,我感到惊讶;运行代码时我期待错误,但我没有...请解释任何问题?

此外,当使用带指针的结构作为其字段时,例如

struct dummy 
{ 
int *m; 
.... 
} 

我怎样才能取消引用一个虚拟变量dvm?我试过dv.m,它确实工作,虽然我期待dv.(*m);请任何解释?

+0

这应该是两个问题,其中每个问题都会成为问题,因为C上的任何教科书都会回答它们。 –

+0

要访问结构中的指针,可以使用'* dv.m'或'dv.m [0]'或类似的东西; 'dv.m'就是指针。在'.'或' - >'之后,你总是有一个成员名字(一个简单的标识符,尽管如果编码器足够反常并且不被代码审查员控制,它可以用括号括起来)。 –

+2

“,我得到了”乱码“,让我感到吃惊,因为p地址没有初始化” - 呵呵......你觉得'p =“乱码”;'是吗? – 2013-12-08 08:22:18

回答

4

对于第一个问题,行p="gibberish"p初始化为指向字符串"gibberish"的第一个字符。

对于第二个问题,假设dv的类型为struct dummy而不是struct dummy *的类型,则您希望*(dv.m)遵守该指针。

+0

谢谢,因为不断的“乱码”是char *本身 – user2005893

0

这也是初始化:

int main() 
{ 
    int t=3; 
    int* p; 
    p=&t; /* intitialization */ 
} 
0

指针变量以及,

和“废话”是一个字符串(关于它的研究), 你在做什么在这里

p="gibberish"; 

正在取文字串的地址并分配给p指针

*第二个问题

哪里做点东西

struct dummy dv; 
int i =2; 
dv.m=&i; 
printf("%i",*dv.m); 

第一指针,你必须创造一些指向,然后将其分配到指针

dv.m=&i; 

和然后引用指针 printf(“%i”,* dv.m);