一.类型
当char int short与unsigned 类型运算自动化为unsigned
char 1, short int 2, long int 4, long long 8,float 4,double 8,long double 12//8,bool 1,
void 无类型
float double 天生有符号
float 1位符号 后8个移码 后23个尾码
12.25f
1100.01 最后一位2的-2次方
float 内存存放方式:查
(float&)和(float)查2种转换的区别
eg:char a=-5;
扩充符号位 1111 1101 ->1111 1111 1111 1111 1111 1111 1111 1101
unsigned int b=10;//
if(a>b)//a变成无符号整型 非常大
{}
eg:
char a,b,c,d
a='a' a=0x61 编译成功 但char 只有一个字节 把字符转换成ascall码值
b='ab' b=ox6162
c='abc' c=ox61626364
d='abcd' d=ox61626364
小项目:
上万的整形的表示和加减乘除运算
6648845813232
二. 指针
- 从右向左解释 先括号
*p=&a 一级指针
**s=&p 二级指针
int (*p)[10] =&ar指向数组的指针本质是指针 指向数组
2.int p[10] 指的指针数组 他是个数组 有10个元素 每个元素是int类型 本质是数组 元素是指针
也就是指向int的指针 也就是存放10int指针变量
比如 int a[12][10];
int ( * p )[10] = &a[0];
就是所谓 int (*p)[10]是一个指向一个含有10个int元素的数组的指针
int *p[10] 指针数组
int * (S)[10]=&br 指向br[10]
EG:
int ar[5][2]={1,2,3,4,5,6,7,8,9,10}
int (p)[2]=&ar[1] // 此时的ar为数组 &ar[1]代表第二个以为数组首地址 二维数组是由多个以为数组组成 ar+1的意思是第二行的首地址
int s=ar[1]
printf("%d %d \n",p[1][3].s[3])
输出 p[1][3]=((p+1)+3)//可以改编成这样//=8
s[3]=6 //指向3的地址
s[3]= * (s+3)//指向3+3 6的地址
p+1指向第二行地址的指针
*(p+1)指向第二行元素的指针
- (*(p+1)+3)空间元素的值
!!手机图
//加星号改变了类型//
END
2.函数指针
int fun(int ,int )//函数的声明
int (*pfun)(int ,int )=NULL//函数指针存放
pfun=Add_int //Add_int ,Add_int ()
sizeof(pfun)=4
sieof(*pfun) 报错
EG:
pfun=Add_int //pfun指向函数Add_int
a=10
b=20, c=0;
c=pfun(a,b)
c= (*pfun)(a,b)
EG:
void(int a,int b,int (*P)(int ,int ))
//函数指针 探索void(int a,int b,int (*P)(int ,int ))和void(int a,int b,int P(int ,int ))的差异//
{
if()return;
int c=p(a,b);
printf(“c”)
}
int mian()
{
fun(10,20,Add_int );
fun(10,20,Max_int );//回调函数
}
end
函数指针定义方案
typedef int (*pfun)(int ,int )
pfun x,y;//不要和宏扯在一起
eg1: pfun fun(pfun P)
{
returun c;//返回的指针函数
}
eg2:
int main()
{
int (*pfun[3])(int,int )={add_int ,max_int ,sub_int );//函数指针数组,开辟3个字节//
int( * (*P)[3]))(int ,int );// (*P)[3])指向数组 在加上‘ * ’
}