符号(单引号+双引号+逻辑运算符)

 1 #include <stdio.h>
 2 int main()
 3 {
 4     char* p1 =  1 ;
 5     char* p2 = '1';
 6     char* p3 = "1";
 7     printf("%s, %s, %s", p1, p2, p3);
 8     printf('
');
 9     printf("
");
10     return 0;
11 }

char* p1 =1 ;表示将p1这个指针空间赋值1,那么p1指向了地址为1的内存空间;同理char* p2='1';将‘1’对应的ASCLL码(49)赋值给p2指针空间,则p2指向了地址为49的内存空间。这两个地址空间的内存段,都是低地址段,是系统预留的空间,用来拷贝内核代码的使用的,所以上层的应用程序,不能占用这部分空间——段错误
char* p3="1";p3是指针空间,分配四个字节大小的空间,用来存放地址值,p3指向的内存空间是char类型的,只分配一个字节空间。char* p3="1";此时p3空间存放的值是字符:‘1’和‘’。

printf(' ');由printf函数的原型:printf的第一个参数是一个指针类型的形参,那么将一个字符赋值该变量,出现的问题如上述。

c语言中的单引号和双引号:

单引号:表示字符常量

‘a’表示字符常量;在内存中占一个字节;‘a’+1表示‘a’的ASCLL码+1,结果为‘b’。

双引号:表示字符串常量

“a”表示字符串常量;在内存中占两个字节;“a”+1表示指针运算,结果指向“a”的结束符——‘’。

字符串表示的是字符串的首地址,所以:char abc ="a";实际上abc中存放的是“a”首地址的一个字节的内容(高地址位字节/低地址位字节)

逻辑运算符:&&,||,!

短路原则:&&见假为假;||见真为真

exp1&&exp2

exp1||exp2

对于&&,如果&&前面的表达式为假,那么&&之后的表达式不再计算(不再执行);对于||,如若前面的表达式为真,那么其后的表达式不再计算

!exp

对于!,单目运算符,其后表达式为0值时,!exp整体为真;其后的表达式为非0值时,!exp整体为假。

exp1?exp2:exp3

对于?:,当?前表达式为真时,整个表达式返回exp2的值,否则,整体返回exp3的值。不能直接作为赋值号的左值

 *(a<b? &a,&b)=3; //作为左值得情况
内在的趣味,表面的繁琐
原文地址:https://www.cnblogs.com/data1213/p/4821686.html