[英]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)
或者其他東西。
但我還不能從pnum
和num
獲得97。
如何使用pnum
或num
獲得97?
你不能使用int *pnum
變量獲得結果,因為它是一個指針,並且它沒有指向int
值97。
實際上,程序的內存中沒有存儲int
值為97的位置; 有一個存儲char
值為97的地方,但你不能指向它的int
指針。 當然你可以在解除引用之前將pnum
為char*
,但這與你的第一個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/
現在我們知道格式說明符:
所以,獲取代碼:
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 = #
指針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 = #
printf( "%s\n", ( char * )*pnum );
printf( "%d\n", *( char * )*pnum );
return 0;
}
程序輸出是
97
abcd
97
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.