c - 初始化从指针生成整数

时间:2016-05-19 16:26:26

标签: c

我正在尝试在char变量中为字母获取数字ASCII。到目前为止我的代码是:

 int main (int argc,char* argv[]) {
    char c="A"; //here error
    char b="'"; //here error
    char d="z"; //and here error
    printf("%d\n %d\n %d\n",c,b,d); 
}

但我收到以下错误:

analizer.c: In function ‘main’:
analizer.c:13:8: warning: initialization makes integer from pointer without a cast [enabled by default]
analizer.c:14:8: warning: initialization makes integer from pointer without a cast [enabled by default]
analizer.c:15:8: warning: initialization makes integer from pointer without a cast [enabled by default]

3 个答案:

答案 0 :(得分:6)

"A"字符串文字(字符数组)。 'A'字符常量(整数)。你想要的应该是后者。

#include <stdio.h>

int main (int argc,char* argv[]) {
    char c='A';
    char b='\''; // use escape sequence
    char d='z';
    printf("%d\n %d\n %d\n",c,b,d); 
}

编译器将允许您提取数组的元素(字符串文字),如下所示,但在这种情况下使用字符常量应该更好。

#include <stdio.h>

int main (int argc,char* argv[]) {
    char c="A"[0]; // a typical way to deal with arrays
    char b=*"'"; // dereferencing of a pointer converted from an array
    char d=0["z"]; // a tricky way: this is equivalent to *((0) + ("z"))
    printf("%d\n %d\n %d\n",c,b,d); 
}

答案 1 :(得分:2)

基本上,当你这样做时(无效),你指向一个字符串文字:

char c="A";

您需要为变量写一个字符:

char c='A';
char b='\'';
char b='z';

答案 2 :(得分:1)

C字符串中只是一个以\0结尾的字符数组。因此,如果您只想使用一个字符,请声明char变量并使用字符single引号。如果要使用字符串,请声明char数组并使用double引用

char a='A' //  just one character
char b[20]="Some_Text"// multiple characters(a string)

在第一种情况下,a包含&#39; A&#39;的整数值。但在第二个中,b包含它指向的字符串的基址。必须使用b[] b[0]等索引访问数组b[1]中的每个字符。

您可以使用字符串将单个字符表示为

char a[]="A" // a string of size 1

然后你可以打印它的等价整数

printf("%d",a[0]); //0th element of the string

使用其他答案中描述的单引号方法。