int main()
{
int a = 10;
printf("%p", &a);
//取地址取得是二进制,但是肉眼看到是十进制展示
int* pa = &a;//这里是int因为a也是int ,pa是用来存放地址的 -pa就是一个指针变量
*pa;//解引用操作符 间接访问操作符
*pa = 20; //相当于嘴上最上面的int a=10改成等于20
return 0;
}
int main()
{
int a = (int)3.14;
return 0;
}
char是一个字节
一个指针占4或8个字节
指针大小不论类型
int main()
{
int a = 3;//真
int b = 0;//假 0为真 非0为假
/*if (a && b)*///a并且b 两个都满足 有一个为假就是假
if (a || b)//a或b 有一个满足就满足
{
}
return 0;
}
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
//i=a++||++b||d++; 2234(a真后面不用算了), 只要有为真的后面就不用算了
printf("a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d);//输出结果为1 2 3 4。左边确定为假时右边就不用算了 第一表达式为0后面的表达式就不计算
return 0;
}
int i = 0, a = 0, b = 2, c = 3, d = 4;
//i=a++||++b||d++; 2234(a真后面不用算了), 只要有为真的后面就不用算了
//结果为1 3 3 4
exp1 ? exp2:exp3
int main()
{
int a = 3;
int b = 0;
if (a > 5)
b = 1;
else
b = -1;
//三木操作符写法
b=(a > 5 ? 1 : -1); //如果a真大于5就是1 否则就是-1
//表达式1 2 3 对应公式 exp1 ? exp2:exp3。 如果表达式1结果为真 会将2的值赋给b否则将3的结果赋给b。如果1为假则相反
return 0;
}
exp1,exp2,exp3, …expN
int main()
{
int a = 3;
int b = 5;
int c = 0;
///逗号表达式要从左到右以此计算,但整个表达式的结果时最后一个表达式的结果
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
return 0;
}
if (a = b + 1, c = a / 2, d > 0);//从左往右依次计算 d受前面代码影响
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// 0 1 2 3 4 5 6 7 8 9
printf("%d", arr[4]);//[]就是下标引用操作符 []操作数是2个 arr和4
return 0;
}
int Add(int x, int y)
{//函数的定义
return x + y;
}
int mian()
{
int a = 10;
int b = 20;
//函数的调用
int ret = Add(a, b);//必须带这个圆括号
return 0;
}
.结构体.成员名
->结构体指针->成员名
//结构成员访问操作符
//.
//->
//结构体
// int float char short
//double long
//书 :书名 书号 定价
//创建了一个自定义类型
struct Book//可以定义一种新的结构体的类型
{
//定义一本书 描述书所需要的详细信息
char name[20];
char id[20];
int price;
};
int main()
{
int num = 10;
struct Book b = {"c语言","C2020202",55};//跟数组类似 有各种各样的元素所以用大括号
struct Book* pb=&b;//结构体指针所以用struct Book
//结构体指针->成员名
printf("书名:%s\n", pb->name);
printf("书号:%s\n", pb->id);
printf("价格:%d\n", pb->price);
/*通过pb访问b*/
printf("书名:%s\n", (*pb).name);
printf("书号:%s\n", (*pb).id);
printf("价格:%d\n", (*pb).price);
//printf("书名:%s\n", b.name);//后面表示b里面的成员
//printf("书号:%s\n", b.id);
//printf("价格:%d\n", b.price);//.的方式可以找到结构体变量里的成员
return 0;
}
截断是只保留最低的字节内容 剩下的扔掉
上边内容的翻译:自己翻译了一下:机器运算的时候最低标准是整型的运算 你这里写的数据没达到整型 编译器会帮你扩成整型传到机器
无符号位 就是如果用unsigned int就是不管怎么样都补0
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if (a == 0xb6)
printf("a");
if (b == 0xb600)
printf("b");
if (c == 0xb6000000)
printf("c");
return 0;//输出结果为c 因为char 和short都发生了整型提升 int不用
}
int main()
{
char c = 1;
printf("%u\n", sizeof(c));//char一个字节
printf("%u\n", sizeof(+c));//+c只要参与运算就会整型提升 提升成4个字节的一个整数
printf("%u\n", sizeof(-c));
printf("%u\n", sizeof(!c));
%u是打印一个unsigned的数
return 0;//输出结果1 4 4 4
}
int main()
{
int a = 4;
float f = 4.5f;
a + f;// a的类型转换成float然后进行计算 字节长度一样 像精度更高的转换
return 0;
}
** na是无结合性**
LR从左向右结合
因为使用了static函数 先看fun 第一次进去时2 第二次3 第三次4
代入到main
代码运行结果-10 2-3*4
**问题代码 **