菜单开关

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

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

单引号

实验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

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表