字符串指针的奇怪行为

时间:2019-03-05 19:59:14

标签: c string pointers

#include <stdio.h> 
int main()
{ 
  char*m ;
  m="srm";  
  printf("%d",*m); 
  return 0; 
}

输出为115。有人可以解释为什么给出115作为输出吗?

3 个答案:

答案 0 :(得分:6)

*mm[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; 
}