簡體   English   中英

如何使用其他變量printf ascii代碼?

[英]How can i printf ascii code using other variable?

我正在學習C語言。

這是我的CODE

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

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

    int num = character;
    int * pnum = #

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

    return 0;
}

我得到的結果如:97和abcd。

我學會了97是'a'的ascii代碼。

我想要使​​用pnum變量的結果97,

所以我嘗試了printf("%d", pnum)printf("%d", *pnum)或者其他東西。

但我還不能從pnumnum獲得97。

如何使用pnumnum獲得97?

你不能使用int *pnum變量獲得結果,因為它是一個指針,並且它沒有指向int值97。

實際上,程序的內存中沒有存儲int值為97的位置; 有一個存儲char值為97的地方,但你不能指向它的int指針。 當然你可以在解除引用之前將pnumchar* ,但這與你的第一個printf相同:

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

如果要將97轉換為整數變量,請使用num而不是pnum

int num = *character;

這會將'a' char值轉換為其int代碼(系統上的97)。 現在您可以指向它,或直接打印結果:

int *pnum = #
printf("%d %d\n", num, *pnum);

您可以參考: http//www.cplusplus.com/reference/cstdio/printf/

現在我們知道格式說明符:

  • d有符號十進制整數
  • 我有符號十進制整數
  • u無符號十進制整數
  • o無符號八進制
  • x無符號十六進制整數
  • X無符號十六進制整數(大寫)
  • f十進制浮點,小寫
  • F十進制浮點,大寫
  • e科學記數法(尾數/指數),小寫
  • E科學記數法(尾數/指數),大寫
  • c字符
  • s字符串
  • p指針地址

所以,獲取代碼:

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

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

通常,程序具有未定義的行為。 根據C標准(6.3.2.3指針)

6任何指針類型都可以轉換為整數類型。 除了之前指定的以外,結果是實現定義的。 如果結果無法以整數類型表示,則行為未定義。 結果不必在任何整數類型的值范圍內。

例如, sizeof( char * )可以等於8,而sizeof( int )可以等於4.這是int類型的對象,可能無法存儲指針的值。

而不是此聲明中的int類型

int num = character;

你應該使用頭文件<stdint.h>聲明的intptr_t類型

例如

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM