%u 打印无符号整型,认为内存中存放的补码对应的是一个无符号整型
%d ------有---------------------------------------------------------------有------------
#inclulde<windows.h>
Sleep(100)//ms
可用于查看跳动的值
char的范围 -128~127
short的范围-32768~32767
浮点型在内存中的存储
整型类型的取值类型在本地库中的limits.h
浮点型-----------------------------------float.h
例如v=5.5
二进制 101.1
(-1)^0 *1.011 *2^2
------s----m------e
用(-1)^sm2*e可以表示任意一个二进制浮点数v
当32位浮点数存在内存中
单精度浮点型
111111 111111111111 11111111111111111
s------ --e----------------- --m------------------
1----- —8----------------- —32----------------- bit
双精度浮点型
111111 111111111111 11111111111111111
s------ --e----------------- --m------------------
1----- —11--------------- —52----------------- bit
例如
int main()
{
int n=9; &n-->int*
[00001001]-9的补码
float* pFloat=(float*)&n;
printf("n的值%d",n); 9
printf("pFloat的值%f",*pFloat); 0.00000
0 00000000 00000000000000000001001
(-1)^0 * 0.00000000000000000001001*2^-126---(无穷小126)
S E(8*0) M
*pFloat=9.0;
printf("num的值%d\n",n); 1091567616
printf("pFloat的值%f",*pFloat); 9.000000
}
*pFloat=9.0;
9.0
1001.0
1.001*2^3
(-1)^0&1.001*2^3
01000001000100000000000000000000
当E全1,±无穷大
当E全0,1-275/1-1023就是真实的值
指针的进阶
字符指针
常量字符串不可以被修改,联系用const定义
const char*ps=“sccsd”;
用来调式,这是错误示范,这就传了个首字母
一般用
int main()
{
char ch='w';
char *pc=&ch;
*pc='w';
return 0;
}
常量字符串无法被修饰,内存中就只有一个
eg
char str1[]=“hello”
char str2[]=“hello”
const char* str3=“hello”
const char* str4=“hello”
1!=2
3=4,(常量字符串都在一个内存申请空间)
指针数组
本质上存的是指针
char *arr[5]={" “,” “,” “,” “};
printf(”%d",arr[i]);
还有一种
int arr1[5]={}
int arr2[5]={}
int arr3[5]={}
int *arr[3]={arr1,arr2,arr3};
printf arr[3][5];
类似矩阵
数组指针
是指向数组的指针
int arr[10]={};
int (*pa)[10]=&arr;//这里取出来的是数组的地址存放到pa当中,pa是数组指针变量
数组名是数组首元素的地址,有两个例外
1,sizeof(数组名)
2,&数组名
理解存储代表的多大,是什么
printf(“%d”,arr+1);--------4
printf(“%d”,&arr[0]+1);—4
printf(“%d”,&arr+1);------40
10->38是十六进制
216+81=40位
void printf1(int *arr,int sz)
{
int i=0;
for(i=0=;i<sz;i++)
{
printf("%d ",*(arr+i));
}
printf("\n");
}
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int sz=sizeof(arr)/sizeof(arr[0]);
printf(arr,sz);
return 0;
}
二维数组的首字母就是二维的第一行
arr是二维数组的数组名
数组名是数组首元素的地址
arr就是第一行的地址
*(p+i)这一行的数组名,第i行
数组指针就是矩阵
void printf4(int (*p)[5],int r,int c)
{
int i=0;
for(i=0;i<r;i++);
{
for(int j=0;j<c;j++)
{
printf("%d ",*(*(p+i)+j));
}
printf("\n");
}
}
void tes2()
{
int srr[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
printf4(arr,3,5);
}