翁凯C语言



c的四种类型


printf("sizeof(int)=%ld",sizeof(int));
是静态运算符

a+1.0强制类型转换把a变成float,但是没有加上1
表达负数:

1&2不好的理由
补码:-1=0-1,a=2n方-a
unsigned


小于int输出都用%d
a++是先进行赋值运算,就是b=a,然后a再加1;
b=3; a=5;
b=a++; b=5;
b=++a; b=6

总结:一般都用int

%f
用%e(E)可以输出科学计数法


整数无法表达无穷大,所以12/0没有意义
a=1.345f表示a的类型是浮点数(没搞懂)

不能用==来做相等判断
算数的时候不能用浮点数,误差会累积,可以整数小数分别进行运算。

浮点数是个编码的形式,用专门的部件进行运算



输入了i之后要按回车or空格才能开始输入下一个,没有空格的话你按的那个空格就会被当作c的输入
没有空格的话,%d就只读到整数结束为止,后面那个(空格)就给后面的东西读。

c=i,因为char又是整数又是表格吗
输出字符'',

\"
printf("请输入数字,如输入\"5\"");
(其实用中文的引号就没问题了)

printf("123\b\n456\n");
为啥在黑框(shell)里不同。
我们写的程序交给shell(别人写的程序)来运行,shell读入我们键盘的输入,再把电脑的输出经过加工给我们看到。

printf("123\bA\n456\n");
BLACKSPACE要回到上一个位置但不一定删除,如果你不继续输出东西,就没什么区别了。
\t
TABLE键,每一行固定的位置而不是固定的字符数。


所以输出只有%d和%l

(short)32768==-32767


实际上bool还是个整数类型


与或非
表达4<x<6:4<x&&x<6
判断字符c是否是大写字母:
c>='A'&&c<='Z'





meidong

例子:


不好,因为不是单一出口;


把函数a的头复制在最前面
(在函数b中使用,声明放在b的外面
;让编译器知道函数的变量和返回类型
可以不写参数名称:
void sum(int ,int )

如果给的参数类型和规定的不一定
在c语言中没关系,
他会自动进行转换,2.4-->2
c语言在调用函数时,永远只能传值给函数
每个函数都有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系。



i的生存期取决于a,b的大小关系

声明中swap()
表示不确定有没有参数,编译器会猜测需要两个int的参数
所以不要写这种



(这个我用两个for写不出来www要再试一下)
先做一轮scanf再进入循环也

for,while&if语句的差异

int a[10];
a[0]~a[9]

(关于本地变量 )

可以用switch case;

(10用 const int number=10代替)
初始化的for循环可简化为int count[number]={0};

1.a[]={2,4,3,5};
2.a[12]={2};
(第一个是2,其他都是0)
3.a[3]={[1]=2};
(第2个是2,其余是0)

for(i=0;sizeof(a)/sizeof(a[0]);i++)
这样可以变动数组大小而不用修改其他部分






(||和&&的优先级)

如何知晓函数的详情

套路:prime[count++]=i;//一行做了两件事
在调试的时候加{},我们可以在里面定义自己的本地变量




调试代码
a[i][j]






printf(“0x%x”,&i)
printf(“%p”,&i)
%p把变量作为地址类型输出

地址的大小取决于你是64还是32架构
强制类型转换
32位 地址是4个字节 64位 地址是八个字节

(所以地址和整数不一定相同)
&(i+p) x
c语言地址分配由上至下,先定义的变量地址更大



*表示这里p是一个指针,它指向的是一个int类型的变量
是把*加给了p,q还是个int



读写变量








试图往0的地方写12
a[]是指针
int *a






不能通过p修改i,


1.是保证在函数内部不会动指针所指的值



sizeof(char)=1;sizeof(int)=4;
p+1=加上个sizeof(类型)

数组和指针可以混用。。。??

p+1指向的就是ac[1],没得意义了。


p1-p得出这两个之间能放几个int类型的东西




虚拟地址


q=p x

(初学不具备太多意义)
