1、指针
1)指针:指针是一个地址,一个常亮;
2)指针变量:存放指针的变量,它存放的是一个地址
3)指针变量的格式: 类型说明符 *变量名
例:int *p ;
4)一次性定义多个指针的格式:int *p ,*s ;
5)指针变量的初始化:用地址初始化
6)先定义后初始化:
int *p ;
p = &a ;
7)定义的同时初始化:int *p = &a ;
8)指针变量*p 的含义:p中存放的是它指向的空间的首地址,*p表示获取p指向的空间的内容或者是p所指的内存单元所对应的地址中的内容。
9)定义一个整型的变量:int a = 5;(假设变量a的地址=0x011F ),在定义一个指针:int *p = &a ;则p = 0x011F, *p = 5 ;
10)指针变量给变量赋值: int a = 4; int *p = &a; int b = *p; 则b = 4;
11)指针变量给变量赋值: int a = 4; int *p = &a ; *p = 6;则 a = 6 ;
12)指针变量指向空:int *p = NULL,表示什么也没指,这是指针变量的常用用法。
13)野指针:指一个指针变量定以后,如果没初始化,存放的就是垃圾数,此指针称为野指针,野指针可能会扰乱系统程序。
14)指针可以在被调函数中修改主调函数中变量的值。定义一个被调函数(void)test( int *p ){*p = 100};
主调函数 int main(){ int a = 18; int *p1 = &a; test( p1); printf(“%d”,a)} ,则a = 100;
15)如果一个指针变量存放的是另一个指针变量的地址,则称这个指针变量为指针的指针变量,也称多级指针:int a = 2; int *p = &a; int **s = &p ,则*s称为二级指针,也叫多级指针。
16)指针的类型要和指向的变量的类型要一致,什么类型的指针指向什么类型的变量。
17)定义一个数组:int arr[]={1,2,3,4,5}; int*p = arr; 则p+1就指向了数组的第二个元素,p+i就指向了数组的第i+1个元素,加减同理。
18)指向同一数组的两指针相减之差为数组元素之间相差的个数。
2、格式控制符
1)%d: 输出一个十进制的整数: int a = 4; printf(“%d”,a); 输出结果 4 。
2)%f: 输出一个单精度实型数据,默认有效位精确到小数点后六位。小数点后多于六位的取前六位,不足六位的补0;float a = 2.34f; printf(“%f”,a); 输出结果为 2.340000 。
3)%c: 输出字符。char a = ‘a’; printf(“%c”,a); 打印结果 a。
4)%s输出字符串。char *str=”lloveyou”;
printf(“%s”,str),打印结果:lloveyou
5)%p: 输出变量地址。float a = 3.1f; printf(“%p”,&a);则打印结果为:0x.....
6)%ld: 输出长整型数据。printf(“%ld”,strlen(str));
7)printf(“f=%m.nf\n”,f): m为列数,n为小数点后的位数,例:printf(“%3.3f\n”,1.25463);则输出结果为:1.25.
8)printf输出多个字符时,既可以用空格隔开也可以用逗号隔开
9)scanf输入多个字符而控制字符串无分隔符时,要求我们用空格、tab、回车隔开;scanf(“%d%d%d”,&a,&b,&c);则输入类32_5_13;
10)scanf输入混合数据时,要避免用空格,因为空格也是个字符,会被char类型的变量接收;在输入输出时加相同的分隔符既可避免。
11)%*格式控制符(如d): 表示跳过一个字符(跳过一个整型数)。
12)scanf中不要使用\n.