菜单开关

周梦康 发表于 2017-10-19 3202 次浏览 标签 : C语言快速入门

单引号

实验1

#include <stdio.h>
#include <string.h>


int main(int argc, char const *argv[])
{
    char mask[1];

    memset(mask, 0, 1);

    mask[0] = 1;
    printf("%c\t%d\n",mask[0],mask[0]);

    mask[0] = '1';

    printf("%c\t%d\n",mask[0],mask[0]);

    mask[0] = 49;

    printf("%c\t%d\n",mask[0],mask[0]);

    return 0;
}

结果为

     1
1    49
1    49
%c 输出一个字符
%d 整型输出

第一种情况,直接存的是1,而根据 ascii 表1代表的可不见字符soh

0 nul    1 soh    2 stx    3 etx    4 eot    5 enq    6 ack    7 bel
8 bs     9 ht    10 nl    11 vt    12 np    13 cr    14 so    15 si
16 dle   17 dc1   18 dc2   19 dc3   20 dc4   21 nak   22 syn   23 etb
24 can   25 em    26 sub   27 esc   28 fs    29 gs    30 rs    31 us
32 sp    33  !    34  "    35  #    36  $    37  %    38  &    39  '
40  (    41  )    42  *    43  +    44  ,    45  -    46  .    47  /
48  0    49  1    50  2    51  3    52  4    53  5    54  6    55  7
56  8    57  9    58  :    59  ;    60  <    61  =    62  >    63  ?
64  @    65  A    66  B    67  C    68  D    69  E    70  F    71  G
72  H    73  I    74  J    75  K    76  L    77  M    78  N    79  O
80  P    81  Q    82  R    83  S    84  T    85  U    86  V    87  W
88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^    95  _
96  `    97  a    98  b    99  c   100  d   101  e   102  f   103  g
104  h   105  i   106  j   107  k   108  l   109  m   110  n   111  o
112  p   113  q   114  r   115  s   116  t   117  u   118  v   119  w
120  x   121  y   122  z   123  {   124  |   125  }   126  ~   127 del

而第二种情况则是存的'1',用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。因此'1'的含义其实和十进制数49的含义是一致的。

实验2

转成更容易理解的思路,char 存1~127的数字,'1'表示单引号计算出 ascii 表里面的1对应的数值(49)

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    if('1' == 49){
      printf("还有这种操作\n" );
    }

    return 0;
}

是相同的哟!所以第二种情况和第三种情况是等价的。

双引号

char *c = "abcdef";

双引号做了3件事:

  • 在常量区申请内存,存放字符串
  • 在字符串尾加上了'/0'
  • 返回字符串的首地址

所以这里的赋值操作是将abcdef\0的首地址赋值给了c

评论列表