目录
4.int (*a)(int)和int (*a[10])(int)
1.%m.ns打印字符串是什么意思?
m:输出字符串的宽度
n:左起截取目标字符串的n个字符,右对齐,补充空格
如果字符串长度>n>m 此时m的作用失效,只有n起作用
如果n>字符串长度,遇到\n自动停止打印
如果%-m.ns代表左对齐
例如
m=3说明截取宽度是3
n=2左起截取2个字符
没有负号(-)默认右对齐,不够的自动补充空格
对于浮点数的打印还,m还是一样的意思,但是n表示精度
m=10表示截取宽度是10,n=2表示小数点之后保留两位 ,不够的宽度用空格补齐
2.const和*
看这三个p
简单介绍一下常量指针和指针常量
常量指针:指针所指向空间的值不能改变,不能通过指针解引用修改指针所指向空间的值,但是指针的指向可变
指针常量:指针是常量,指向不能变,但所指空间的内容可以改变,可用指针解引用改变所指向的空间的值
这个太晦涩,简单来说就是const和*的位置决定到底谁不能变(const修饰谁,谁就有常性)
const int * a :const在*前,说明解引用之后的内容被const修饰,不能改变,具有常属性
即int*指针指向空间的值不能改变——常量指针
int const * a:const还在*前,和上面一样
int * const a:现在a被const修饰,a类型是int*,指针被修饰——指针常量,指向不能改变,但所指空间的内容可以变
3.运算符优先级
可以自己查表,但是有一些很常见的:
括号的优先级最高
[ ] > * > +
还有这些符合运算符的优先级是比+-*/低的
4.int (*a)(int)和int (*a[10])(int)
第一个*和a结合,是一个指针,指针指向是int (int)即有一个整型参数int,返回值是int
第二个[ ]优先级高于*,所以a[10]表示一个数组,数组类型是int (*)(int)
这个*是指 指针,指针指向int (int),也就是指向函数,函数的返回值int,有一个整型参数是int
5.printf和大小端
回顾大小端机器
小端:低位存低地址
大端:低位存高地址
看一下,题目说这是一个小端机
如果是大端机
现在我们调用printf函数
创建函数栈帧(栈是从高地址生长到低地址)
printf的变量读取是从右往左,也就是先读取c
并且栈是先进后出
所以先在栈的低地址读取,%d打印,会从低地址(栈顶)一次读取4字节
所以最终结果就是1 0 2
6.二维数组
二维数组的每一行初始化,必须是连续的,也就是不可以{0,,2}初始化
初始化不可以省略列数
并且计算二维数组**a[3][4]的时候,首先明确这个二维数组三行四列 ,数组存放指针(32位下4字节)
所以所占空间为3*4*4=48字节