如何使用其他变量printf ascii代码?

时间:2017-07-15 09:00:58

标签: c string pointers type-conversion

我正在学习C语言。

这是我的代码

int main(void)
{
    char * character = "abcd";

    printf("%d \n", *character);

    int num = character;
    int * pnum = #

    printf("%s \n", * pnum);

    return 0;
}

我的结果如:97和abcd。

我了解到97是ascii代码' a'。

我希望结果97使用pnum变量

所以我尝试了printf("%d", pnum)printf("%d", *pnum)或其他人。

但我无法从pnumnum获得97。

如何使用pnumnum

获得97

3 个答案:

答案 0 :(得分:1)

您无法使用int *pnum变量获得结果,因为它是一个指针,并且它没有指向int值97.

事实上,你的程序在内存中没有存储int值为97的位置;有一个存储char值为97的地方,但你不能指向它的int指针。当然,您可以在取消引用之前将pnum转发回char*,但这与您的第一个printf相同:

printf("%d", *((char*)pnum));

如果您想将97转换为整数变量,请使用num代替pnum

int num = *character;

这会将char的{​​{1}}值转换为其'a'代码(系统上的97)。现在您可以指向它,或直接打印结果:

int

答案 1 :(得分:1)

你可以参考: http://www.cplusplus.com/reference/cstdio/printf/

现在我们知道格式说明符:

  • d有符号十进制整数
  • 我签名十进制整数
  • u无符号十进制整数
  • o无符号八进制
  • x无符号十六进制整数
  • X无符号十六进制整数(大写)
  • f十进制浮点,小写
  • F十进制浮点,大写
  • e科学记数法(尾数/指数),小写
  • E科学记数法(尾数/指数),大写
  • c Character
  • s字符串
  • p指针地址

所以,获取代码:

int main(void)
{
    char * chrs = "abcd";
    char * pnum = chrs;
    int num = *chrs;

    printf("%c - %d - %d \n", *chrs, num, *pnum);
    return 0;
}

答案 2 :(得分:1)

通常,程序具有未定义的行为 。 根据C标准(6.3.2.3指针)

  

6任何指针类型都可以转换为整数类型。除了   之前指定的,结果是实现定义的。 如果   结果不能用整数类型表示,行为是   undefined。结果不必在任何值的范围内   整数类型。

例如sizeof( char * )可以等于8,而sizeof( int )可以等于4.即int类型的对象可能无法存储指针的值。

而不是此声明中的int类型

int num = character;

您应该使用标头intptr_t

中声明的类型<stdint.h>

例如

#include <stdint.h>

//...

intptr_t num = ( intptr_t )character;

所以现在变量num包含字符串文字"abcd"的第一个字符的地址。

此声明之后

intptr_t *pnum = &num;

指针pnum具有变量num的地址。

现在输出您最初拥有的字符串文字的第一个字符,取消引用指针pnum,以获取存储在变量num中的值。此值表示字符串文字的第一个字符的地址。您需要将其强制转换为类型char *,然后再将其转换为derefercen。

下面是一个演示程序,展示如何实现它。如果你不取消引用指针,那么将输出整个字符串文字。

#include <stdio.h>
#include <stdint.h>


int main(void) 
{
    char *character = "abcd";

    printf( "%d\n", *character);

    intptr_t num = ( intptr_t )character;
    intptr_t *pnum = &num;

    printf( "%s\n", ( char * )*pnum );
    printf( "%d\n", *( char * )*pnum );

    return 0;
}

程序输出

97
abcd
97