第二章完结

This commit is contained in:
lzy
2024-03-12 22:05:13 +08:00
parent d64b6fe321
commit 0e9bf09117
15 changed files with 282 additions and 0 deletions

110
Chapter2/变量/auto.c Normal file
View File

@@ -0,0 +1,110 @@
#include <stdio.h>
#include <stdlib.h>
#if 0
void func(void)
{
int x = 0;
x = x + 1;
printf("%p->%d\n", &x, x);
}
void func1(void)
{
static int x = 0;
x = x + 1;
printf("%p->%d\n", &x, x);
}
int main()
{
// auto int i;
// printf("i=%d\n", i);
// out:i=21915每次都不一样
// static int i;
// printf("i=%d\n", i);
// out:i=1
// func();
// func();
// func();
// out:
// 0x7ffc3c4ca4f4->1
// 0x7ffc3c4ca4f4->1
// 0x7ffc3c4ca4f4->1
// 三次地址看着一样
// 但是是每次函数开始取用,结束销毁的
// 只是gcc刚好都取的栈上同一块地址
func1();
func1();
func1();
// out:
// 0x55fd83c96014->1
// 0x55fd83c96014->2
// 0x55fd83c96014->3
exit(0);
}
#endif
#if 0
int i = 100;
void func(int i)
{
printf("i=%d\n", i);
}
int main()
{
int i = 3;
// printf("i=%d\n", i);
// out:
// i=3
// {
// printf("i=%d\n", i);
// }
// out:
// i=3
// {
// i = 5;
// printf("i=%d\n", i);
// }
// out:
// i=5
// func(i);
exit(0);
}
#endif
int i = 0;
void print_star(void)
{
for (i = 0; i < 5; i++)
printf("*");
printf("\n");
printf("[%s]i=%d\n", __FUNCTION__, i);
}
int main()
{
for (i = 0; i < 5; i++)
print_star();
printf("\n");
// out:
// *****
// [print_star] i = 5
exit(0);
}

View File

@@ -0,0 +1,15 @@
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 10;
int main()
{
printf("[%s]i=%d\n", __FUNCTION__, i);
// func();
call_func();
exit(0);
}

View File

@@ -0,0 +1,17 @@
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
static int i = 100;
static void func(void)
{
printf("[%s]i=%d\n", __FUNCTION__, i);
exit(0);
}
void call_func(void)
{
func();
}

View File

@@ -0,0 +1,5 @@
#ifndef PROJ_H___
#define PROJ_H___
void call_func(void);
#endif

View File

@@ -0,0 +1,14 @@
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
int i = 10;
int main()
{
printf("[%s]i=%d\n", __FUNCTION__, i);
func();
exit(0);
}

View File

@@ -0,0 +1,13 @@
#include <stdio.h>
#include <stdlib.h>
#include "proj.h"
extern int i;
// extern i;也是可以的,会有警告
void func(void)
{
printf("[%s]i=%d\n", __FUNCTION__, i);
exit(0);
}

View File

@@ -0,0 +1,5 @@
#ifndef PROJ_H___
#define PROJ_H___
void func(void);
#endif

103
Chapter2/运算符/op.c Normal file
View File

@@ -0,0 +1,103 @@
#if 0
i++相当于i=i+1
i--相当于i=i-1
int i=1;
i++;表达式值为1i值为2
++i;表达式值为2i值为2
#endif
#include <stdio.h>
#include <stdlib.h>
#if 0
int main()
{
int i = 1, j = 10, value;
// value = i++ + ++j;
// 相当于
// j = j + 1;
// value = i + j;
// i = i + 1;
// out:
// i = 0 j = 11 value = 10
// value = --i + j++;
// i = i - 1;
// value = i + j;
// j = j + 1;
// out:
// i = 1 j = 12 value = 12
// value = i++ + ++i - i-- + --i;
// 避免单个变量多次自增或者自减
// 不同编译器可能结果不同,也难为自己和他人
// printf("i=%d\n", i);
// printf("j=%d\n", j);
// printf("value=%d\n", value);
// printf("%d\n", i > j);
int a = 1, b = 2, c = 3, d = 4;
int m = 1, n = 1;
// (m = a > b) && (n = c > d);
// printf("m = %d\nn = %d\n", m, n);
// a>b为假所以左边为0右边直接不判断了n依旧为1而不是0
// out:
// m = 0
// n = 1
(m = a > b) || (n = c > d);
printf("m = %d\nn = %d\n", m, n);
// a>b为假所以左边为0右边继续判断
// out:
// m = 0
// n = 0
exit(0);
}
#endif
#if 0
int main()
{
int i = 0, j = 10, value;
// int a = 6;
// a -= a *= a += 3;
// a -=.. 81-81=0
// a *=.. 9*9=81给上面
// a += 3; 6+3=9给上面
// 故a=0
// printf("%d\n", sizeof(int));
// printf("%d\n", sizeof(double));
// out:
// 4
// 8
// int a = 3;
// float f = 3.9;
// a = f;
// printf("a=%d\n", a);
// printf("f=%f\n", f);
// out:
// a=3
// f=3.900000
// int a = 3;
// float f = 3.9;
// a = (int)f; // 这个过程不改变f本身的地址和值
// printf("a=%d\n", a);
// printf("f=%f\n", f);
// out:
// a=3
// f=3.900000
exit(0);
}
#endif