- &取地址和*解引用操作符
a 在内存中四个字节,一定会开辟空间,里面要存放10
内存会开辟空间
空间会划分一个一个小的内存单元
每个内存单元都有自己的编号
编号被称为内存单元的 地址
int a =10;
printf("%p",&a);打印a的地址
打印地址%p
地址是个十六进制的数字,其实是二进制
00cff9d4
地址存起来:放到pa里去
pa是用来存放内存单元的地址---pa就是一个指针变量
int pa = &a pa的类型
*说明pa是个指针变量
pa指向的对象是a
a的类型是int
所以这也是int
未来pa的类型由指向对象的类型决定
怎么通过指针变量来找到a
我们用 *pa;//这个被称为解引用操作符 -间接访问操作符
*pa就是a
*pa = 20
a就变成20了不再是10
- (类型) 强制类型转换
int a =3.14;
int a = (int)3.14
把3.14强制转换成int类型
这个时候没有警告 - 再讲sizeof易错类型题
24
数组传参传的是什么呢
是数组首元素的地址
整形的地址传过去本质是一个指针
因为首元素的地址传过来,地址应该放到指针变量内去
所以这个arr 应该是int*arr
arr是个指针
这里的sizeof(arr)算的是一个指针变量的 大小
在32位平台下是4,64 -8
对于 (4),传的是char类型的地址
传的是一个char* arr的指针
同学们注意,指针变量是用来存放地址的
这个ch也是用来存放地址的
她的大小也是一个指针变量的大小
他也是四个或八个字节
char类型指针大小是1笑死我
指针大小无论类型
指针变量都用来存放地址
而地址大小是固定的,地址总是32个二进制序列或者64个二进制序列
所以指针变量不管什么类型都是那么大
- 关系操作符就是判断大小
- if(a == b)
- 比较两个字符串相等 不能使用==
- 逻辑操作符(只看真假)
- 并且和或
- 逻辑语只看真假
- 做一道题
短路原理::::::哈哈哈说得好
12 3 4有手就行
int c = a && b;
&&遇到一个为假就结束
留一手左边确定为假时,右边就不用算了
第二道2234
||遇到一个为真就停止
- 条件操作符(三目操作符)唯一一个
- b = (a > 5? 1:-1);
max = (a>b? a : b);
如果表达式1为真,表达式2要计算,表达式三不计算
如果表达式...
- b = (a > 5? 1:-1);
- 逗号标识符
- 逗号表达式:要从左向右依次计算,但是整个表达式的结果是最后一个表达式的结果
- 会计算表达式
- 例子:
if( , , , ,)
- 例子:学到业务处理
- C语言上多久:三十节课 * 3 =90
磨刀不误
学C语言是在锻炼编程思维和代码能力
- 下标引用,函数调用,和结构成员
- 下标引用操作符[]
- int arr[10 ] = {1,2,3,4,56,,78,};
pritntf(%d,arr[4]);下标引用操作符
[]她的操作数是谁?
是两个 arr 4
- int arr[10 ] = {1,2,3,4,56,,78,};
- 函数调用操作符
- int a = 10;
- int b = 20;
- int ret = Add(a,b);
- 函数的定义和函数的调用
Add(a,b);这个()叫函数调用操作符
函数无参void test()
{}
test()
依然要有()
Add(a,b) ()的操作数有三个Add x y
test()只有一个函数名操作数
- 结构成员访问操作符
- c语言中有个东西叫结构体
int flaot char
我们描述一本书书名,出版社,作者
人:人名,性格,年龄
- 结构体struct Book
strucut book
{
char name[20];
cahr id[20]'
int price;
}
创建一个自定义类型
b.name
.操作符
b是结构体变量名.成员名
第二种方法
:我们直接如果要把b的成员打印出来了
但我们不这样做,我们用地址
&b;b是一个结构体变量,可以取地址,因为他在内存里一定有自己的空间
我们把她地址放到pb中去 pb = &b;
pb是个指针 pb指向结构体,是个结构体指针
通过pb访问b
第三种写法pb是个指针pb->name
pb指向对象的name
这是第三种写法
结构体指针->成员名
pb->name
- c语言中有个东西叫结构体
- 表达式求值(操作符放在表达式中使用)
int c = a+b*7
乘法优先级大于加法所以先乘再加- 隐式类型转换
- 整形提升介绍
例子:char a,b,c
a = b +c ;
b +c的表达结果要放到a去
但是char的大小没有达到整形的大小
使用首先把b和c的值提升为普通整形,
但是提升之后b+c变成四个字节, 放到a里放不下,会发生截断,再储存到a里去
什么叫截断,你是四个字节的数据,你要放到一个字节的数据里
我们只保留最低的一个字节内容,剩下三个字节扔掉
- 整形提升的意义
不管short 还是char都换成int 不升白不升
- 题目
真不会做
发现a和b都是char类型,都没有达到int的大小
这里就会发生整形提升
-126
10000010 - c
c要打印%d
也要整形提升
10000010要整形提升
结果是111111111111111110000010
但是我们在内存中放的是补码
前面正数的原反补都相同,无所谓
打印求它的原码
内存是补码
100000000000000111110
梳理一遍
- 题目
选c
题目中char要进行整形提升
- 题目
1 4 4
c只要参与计算,就要整形提升
float不需要整形提升,只有char和short四个字节
大与等于4字节的就不用整形提升
- 讲解
任何一个表达式都有两个属性
short s = 5;
类型属性可以推倒出来,显而易见
为什么是4,cpu的寄存器的长度一般是int
- 整形提升介绍
- 隐式类型转换
操作符详解三四
最新推荐文章于 2024-07-12 16:23:11 发布