#include <stdio.h>
int main()
{
char*m ;
m="srm";
printf("%d",*m);
return 0;
}
输出为115。有人可以解释为什么给出115作为输出吗?
答案 0 :(得分:6)
*m
与m[0]
相同,即m
指向的数组的第一个元素是字符's'
。
通过使用%d
格式说明符,您可以将给定参数打印为整数。 's'
的ASCII值为115,这就是为什么要获得该值的原因。
如果要打印字符串,请改用%s
格式说明符(期望使用char *
参数)并传递指针m
。
printf("%s\n", m);
答案 1 :(得分:0)
您在这里遇到一些问题, 第一个是您要向char添加三个字节,char是一个字节。 第二个问题是char * m是指向地址的指针,并且不是可修改的左值。唯一应该使用指针的时间是当您尝试指向数据时
示例:
char byte = "A"; //WRONG
char byte = 0x61; //OK
char byte = 'A'; //OK
//notice that when setting char byte = "A" you will recieve an error,
//the double quotations is for character arrays where as single quotes,
// are used to identify a char
enter code here
char str[] = "ABCDEF";
char *m = str;
printf("%02x", *m); //you are pointing to str[0]
printf("%02x", *m[1]); //you are pointing to str[1]
printf("%02x", *m[1]); //you are pointing to str[1]
printf("%02x", *(m + 1)); //you are still pointing to str[1]
//m is a pointer to the address in memory calling it like
// *m[1] or *(m + 1) is saying address + one byte
//these examples are the same as calling (more or less)
printf("%02x", str[0]); or
printf("%02x", str[1]);
答案 2 :(得分:0)
指针和数组的行为类似。数组名称也是指向数组第一个元素的指针。 您已将“ srm”存储为字符数组,其中m指向第一个元素。 “%d”将为您提供指针所指向的项目的ASCII值。 ASCII值“ s”为115。 如果您增加指针(m ++),然后打印它的ascii值,则输出将是“ r”-114的ascii值。
#include <stdio.h>
int main()
{
char *m ;
m="srm";
m++; //pointing to the 2nd element of the array
printf("%d",*m); //output = 114
return 0;
}