格式: scanf(“格式控制串”,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定
存储单元中,并按回车键结束
返值:正常,返回输入数据个数
参数:地址表,使用&+变量名代表变量地址
格式控制串
整形:%d,%i 有符号的十进制整型数、%o 八进制整型数、%#X 十六进制整型数、%u 打印无符号数
浮点型:%f 单精度有符号浮点型数、%e 用科学记数法表示浮点数、%g 打印%f与%e较短的
字符型:%c 字符型、%s 字符串
修饰:%ld 打印长整型数、%lf 打印双精度浮点型数、%hd 短整型数、%lld 长长整型 、%% 输出%本身
bool x=true; ALOGE(" wqtest test bool x: %u", x); 1型 bool y=false; ALOGE(" wqtest test bool y: %u", y); 0
0表示假;非0表示真(1)
2.printf( stream, "%s%c", s, c );%s -- 打印格式,按字符串方式输出变量s的值(字符串)到文件流stream
%c -- 打印格式,按ASCII字符方式输出变量c的值(即打印一个字符)到文件流stream
附加格式说明符(修饰符)
m输出数据域宽,数据长度<m,左补空格;否则按实际输出
.n对实数,指定小数点后位数(四舍五入)
对字符串,指定实际输出位数
-输出数据在域内左对齐(缺省右对齐)
+指定在有符号数的正数前显示正号(+)
0输出数值时指定左面不使用的空位置自动填0
#在八进制和十六进制数前显示前导0,0x
l在d,o,x,u前,指定输出精度为long型
在e,f,g前,指定输出精度为double型
\t制表符
\a响铃
\r回车
\\输出\
\n换行
3.putchar()字符输出函数
格式:putchar( c )
参数:c为字符常量、变量或表达式
功能:把字符c输出到显示器上
返值:正常,为显示的代码值;
4.getchar()字符输入函数
格式:getchar()
功能:从键盘读一字符
返值:正常,返回读取的代码值;出错,返回EOF(-1)
5.puts()字符串输出函数
'\0'与'0'
格式:puts(字符数组)
功能:向显示器输出字符串(输出完,换行)
说明:字符数组必须以‘\0’结束
6.gets()字符串输入函数
格式:gets(字符数组)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明:输入串长度应小于字符数组维数
指针
在计算机内部存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。内存单元的地址称为指针,专门用来存放另一个变量的地址的变量。指针的存储类型是4个字节的目标变量的地址。指针的类型是指针所指向的目标变量的类型
<存储类型> <数据类型> *<指针变量名>;
定义一个指针变量p及数组data
int *p,data[10];
p = data 等于 p = &data[0] (p指向data的第一个元素)
*(p+n) 等于 data[n]
char *ch = "hello world\n"; 等于 char a[] = "hello world\n";
&与*运算符
&含义:取变量的地址
*含义:取指针所指向变量的内容
直接访问与间接访问
直接访问:按变量地址存取变量值
间接访问:通过存放变量地址的变量去访问变量
指针与数组
数组的指针是指数组在内存中的起始地址,数组元素的地址是指数组元素在内存中的起始地址。一维数组的数组名为一维数组的指针(起始地址)。
指针与一维数组*
int a [10];int *p=a;
a[i]、 *(a+i)、 *(p+i)和 p[i]具有完全相同的功能:访问数组第 i+1个数组元素。注意:指针变量和数组在访问数组中元素时,一定条件下其使用方法具有相同的形式,因为指针变量和数组名都是地址量。但指针变量和数组的指针(或叫数组名)在本质上不同,指针变量是地址变量,而数组的指针是地址常量
p++;指针向地址大的方向移动一个单位
a++;这种操作是错误的,数组名是地址常量。不能够进行自加或自减操作
p= a+1;
二维数组表示多个有序的一维数组(每个一维数组当作一个元素)
字符指针与字符串
C语言通过使用char数据类型的数组来处理字符串。
在字符数组中,每个数组元素都是char数据类型的变量。通常,我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符数组有着密切关系,它也被用来处理字符串。输出时,char *p; p = "qwer"; 输出项为指针p,输出p指向的字符串"qwer";输出项为 *p,输出为指针变量当前指向的单个字符‘q’
在程序中,初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中。另外,向字符指针赋给一个字符串常量时,指针应该指向一个存储空间。
char*p = "hello world";指针变量可以直接指向字符串常量
指针数组:由若干个具有相同存储类型和数据类型的指针变量构成的集合。
<存储类型> <数据类型> *<指针变量数组名>[<大小>];
指针数组名就表示该指针数组的存储首地址,即指针数组名为数组的指针。
数组指针:
数组名代表数组第一个元素的首地址
对数组名取地址代表取整片数组空间的首地址,其类型数组指针
inta[10];int (*p)[10] = &a;
const修饰指针
constint *p; const修饰*p,代表指针指向的内容不能被修改,指针的指向可以修改,同intconst * p;
int* const p; const修饰p,代表指针的值不可被修改,指针指向的内容可以被修改
constint * const p;指针指向与指针的值都不可被修改
void指针
void型的指针变量是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类型的变量或数组。
一般形式为:
void *<指针变量名称>;
对于void型的指针变量,实际使用时,一般需通过强制类型转换才能使void型指针变量得到具体变量或数组地址。在没有强制类型转换之前,void型指针变量不能进行任何指针的算术运算
地址传递方式,被调用函数中对形参的操作,将直接改变实参的值。调用函数将实参的地址传送给被调用函数,被调用函数对该地址的目标操作,相当于对实参本身的操作。按地址传递,实参为变量的地址,而形参为同类型的指针。
关键字
1.基本数据:void、char、int、float、double
2.类型修饰:short、long、signed :修饰整型数据,有符号数据类型、unsigned :修饰整型数据,无符号数据类型
3.复杂类型关键字:struct(结构体声明)、union(共用体声明)、enum(枚举声明)、typedef(声明类型别名)、sizeof(得到特定类型或特定类型变量的大小)
4.存储级别:auto(指定为自动变量,由编译器自动分配及释放。通常在栈上分配)、static(静态变量,静态局部变量的值将被保留)、register(寄存器变量)、extern(对应变量为外部变量)、const(变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)、volatile(变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值)
5.流程控制:return;continue(结束当前循环,开始下一轮循环)、break(跳出当前循环或switch结构)、goto(无条件跳转语句)、if、else、switch、case、default、for、do、while
I/O 操作:文件的读r,是计算机的输入操作;文件的写w,是计算机的输出操作。(fopen、fclose、putc、getc、fputs、fgets、fread、fwrite)
数组的空间分配.如int a[10];——会在空间分配出40个相邻的内存单元来(10*4)。
int
*pa;
pa = &a[0];
|
int *pa; int a[10]; pa = &a[0];