我对char指针很好奇

时间:2013-05-16 17:19:32

标签: c

我了解到char * p的意思是“指向char类型的指针”

而且我想我也学会了char意味着阅读

指针到达其“目标”后的内存量。

如此确凿,

char *p = "hello World";

p包含字符串的地址和

p正指向它

Qusetions。

  1. 如果p指向字符串,不应该只读取'h'??? 因为它只读取char的大小?
    为什么`printf(“%s”,p)打印整个字符串???

  2. 我还在Rithcie的书中了解到指针变量不具备数据类型。  真的吗???

5 个答案:

答案 0 :(得分:5)

所以你的字符串“hello world”占据了一些记忆。

[h][e][l][l][o][ ][w][o][r][l][d][\0]
[0][1][2][3][4][5][6][7][8][9][A][B ]

指针p实际上只指向第一个字节。在这种情况下,字节为0.但如果您在

的上下文中使用它

printf("%s", p)

然后printf知道要打印,直到它获得空字符\0,这就是为什么它会打印整个字符串而不仅仅是'h'。

至于第二个问题,指针确实拥有数据类型。如果你要说出来的话,名称可能类似于p的情况下输入“指向字符的指针”,或int *i的“指向整数的指针”。

答案 1 :(得分:1)

指针变量不包含数据类型,它们保存一个地址。但是你使用一种数据类型,这样你就可以知道在使用该指针从内存中读取时,每一步都要前进多少字节。

当你调用printf时,表达式中的%s告诉函数开始读取* p指示的地址(它确实保存'h'的字节值,如你所说),在到达终止字符时停止阅读。这是一个没有直观表示的角色(在代码中将其称为\0)。它告诉程序字符串的结束位置。

答案 2 :(得分:0)

这里* p是指向内存中某个位置的指针,它假定为1个字节(或字符)。所以它指向'h'字母。所以p[0] or *(p+0)会给你一个p。但是,你的字符串以不可见的\0字符结尾,因此当你使用printf函数时,它会输出所有符号,从*开始,其中* p指向,直到'\ 0'。

指针只是一个变量,它能够容纳一些地址(4,8或更多字节)。

答案 3 :(得分:0)

问题:

  

我还在Rithcie的书中了解到,指针变量并不具备数据类型。是真的???

简单地说,是的。

C中的数据类型用于在使用之前定义变量。变量的定义将为变量分配存储空间,并定义将在该位置保存的数据类型。

C具有以下基本内置数据类型。int,float,double,char

引自C Data types

  

Pointer是派生数据类型,每个数据类型都可以有一个与之关联的指针。指针没有关键字,但在变量和函数声明/定义中标有前面的*。大多数编译器提供预定义的常量NULL,相当于0。

答案 4 :(得分:0)

  

如果p指向字符串,不应该只读取'h'???   因为它只读取char的大小?为什么打印printf(“%s”,* p)   整个字符串???

将您的printf("%s", *p)更改为printf("%c", *p)即可看到您想要的内容。两者都根据格式说明符以字符串(%s)或字符(%c)的不同方式调用printf。

打印字符串使用printf("%s", p);

打印char使用printf("%c", *p);


Second Ans。 :指针拥有数据类型。这就是你使用char * p的原因。