c语言 %-6d:6表示输出列宽是6个字符,
如果实际输出的字符不足6个,则用空格补充其余的位置,
如果实际输出大于6个字符,则按实际宽度输出,前面的负号表示在右边补空格
如果没有负号则表示在左面补空格。
数字是几就表是几个空格。
即:
printf("%-6d",123);
输出的结果是(一个小数点表示一个空格):
123...
printf("%6d",123);
输出的结果是(一个小数点表示一个空格):
...123
如printf("%4d",12)输出的格式是__12(前面两个空格)printf("%4d",12345)就直接输出12345
%2.5f 表示以浮点数格式输出变量的值,宽度为2,小数位数为5,宽度不够,以实际为准
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
关于printf函数的进一步说明:
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出0.333333%。
error: cast from 'int*' to 'int' loses precision#
这是因为Linux 64位系统上指针类型占用8个字节,而int类型占用4个字节,所以会出现loses precision。
可以先将int* 转成long类型,long类型可以隐式类型转换到int类型,如下:
int func() {
int *p;
p = //赋值
return (long)p;
}
2019 4.11
static int a 你可以理解成全局变量,如果你是在类A中声明的,
那么你无论new 多少个A, 那么你访问A.a,都共享同一个值。
而 int a, 在不同的A实例里的值是独立的。
常量指针是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而可以指向另一个常量。
指针常量是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。
2.使用方法
写法上的区别:
常量指针:const 在之前 指针常量:const在之后。
使用举例:
(1) 常量指针使用:
如 int b, c;
int const a;
a = &b;
a = &c;
都可以,唯独它指向的内容不能被修改。如:a=20;这是违法的!错误!
(2) 指针常量使用
如 int a ,b;
int * const p = &a;
表示p是一个常量指针它指向变量a的内存。指针常量不能再用p指向其他变量,如 p = &b; 错误!可以修改指向内存的值,如:* p = 20; 指针常量声明的时候必须像上式那样赋初值。
指针常量也不能释放,用p指向NULL,即
p = NULL;
会在编译时报错
/opt/test/test.c:649: error: assignment of read-only variable `p'
还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b; 后面是a,则说明a不能修改!
int const * a = &b;后面是a则说明a不可被修改!
int main (int argc,char const *argv[])中
argc记录了用户在运行程序的命令行中输入的参数的个数。
arg[]指向的数组中至少有一个字符指针,即arg[0].他通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序文件所在的路径。
argc 是参数的个数,argv[]是参数,argv[0]是文件名,argv[1]是第一个参数...
大括号的作用就是把括起来的语句看成是一个整体,你可以把它当成一条语句。
如果if else while for这些判断或循环语句后面的执行语句只有一条,就可以省略大括号。
while(sanf("%d/%d/%d",&a,&b,&c)!=EOF)
EOF=end of file 这回你知道什么意思了吧
scanf函数的返回值说明。
EOF就是-1,是在stdio.h里定义的。
按照上面的说明,scanf函数只有在第一个参数为NULL(空指针)的情况下,才可能返回EOF,否则,返回成功格式化并赋值的参数个数(>=0)。