C入门

1.scanf()标准格式输入函数
    格式: 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

#在八进制和十六进制数前显示前导00x

ld,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)。

3.指针操作数组
int *pa;
pa = &a[0];

 
 4.指针移动
int *pa;
int a[10];
pa = &a[0];
pa+1将指向下一个元素a[1]:
 >> 内存中的变化:"指针加1"会根据指针指定的类型int移动4个内存单元,其实本身并没有移动,只是pa+1等于第5个内存单元地址——“指针加1”中的1的大小是取决于pa的类型int的, 指针类型决定指针跨内存单元的步长。
 
>> pa+1 等于是指向第5个内存单元——a[1]的第一个内存单元。
 

























  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值