指针:也是一个变量,用于存放另一个对象的地址。
定义指针:datatype *pointername;
datatype限制pointername所存储地址的对象必须也是datatype
int a=10;
int *ptr_int;
ptr_int=&a;//将a的地址传给指针ptr_int
*ptr_int=20;//则a=20,*为间接运算符,改变的是地址所对应的对象的值
直接将一个指针地址给另一个同级指针是不可以的
int *ptr_int;
int **ptr_ptr_int;
ptr_ptr_int=&ptr_int;//这样是可以的,ptr_ptr_int里存放的是指针ptr_int的地址
数组名即为数组的首地址,即
int array[10]; //array=&array[0]
int *ptr_array;
ptr_array=array;//与ptr_array=&array[0]等效
指针移动 按照其所指向的数据类型的字节为一个单位,即
int array[10]={0,1,2,3,4,5,6,7,8,9};
int *ptr_array=array;
int i;
for(i=0;i<10;i++)
{
Printf(“%d/t”,ptr_array+i); //即ptr_array向后移动i个int单位,win32下的sizeof(int)为4,即向后移动4个字节
}
若两个指针相等,则表示两个指针指向的同一个对象
函数:
C语言中常用内置函数:
math.h中:double sqrt(double x) 求平方根
double pow(double x,.double y) 求x的y次幂
double ceil(double x) 不小于x的最小整数
double floor(double x) 不大于x的最大整数
ctype.h中:int toupper(int x) 转换为大写字母
int tolower(int x) 转换为小写字母
stdlib.h中:int rand(void) 产生随机数
void exit(int retval) 终止程序 retval 为0是非正常,为1是正常
rand()需要下种子如:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int a[2],i;
srand((unsigned)time(NULL));//以时间time为种子,必须include time.h
a[0]=rand()%26+97;//产生a到z之间的ascii码
a[1]=rand()%26+65;//产生A到Z之间的ascii码
for(i=0;i<10;i++)
printf("%c/n",a[rand()%2]);//随机大小写
}
自定义函数
return_type function_nam([datatype arg1,datatype arg2,…])
返回值类型 函数名 参数列表
递归调用:
必须有函数终止条件,
例:递归调用输出字符串
#include <stdio.h>
char *display(char *p) //返回指针的函数
{
if(*p == '/0') //判断参数是否为/0,是则结束函数
printf("/n字符已经输出完毕!/n");
else{
printf("%c",*p); //打印字符
display(p+1); //指针推后
}
}
void main()
{
char num[] = "abcdefghi";
display(num);
}
变量的定义域:
全局变量,整个程序都可以调用和改变,
局部变量,只在函数体内部生效
存储类型:auto 自动变量,一般不显示声明变量 的 均为auto
register 寄存器变量,提高效率,可以直接从寄存器中读写
extern 外部变量 引入外部的全局变量,以便读写
static 静态变量 在函数体内部定义 生存期为整个程序 改变後的值在程序结束前一直保存
函数参数的传递:
传值调用:只是将实参的值赋值给形参 实参的值并不会因为形参的改变而改变
引用调用/传址调用: 将实参的地址传递给形参 则修改指针所指向的对象的值 就是修改实参的值,所以实参会改变
数组作为参数时 就是传址调用,传递的是数组的首地址即数组名
字符数组 字符串
字符数组与字符串的区别 字符串後有一个’/0’ 而字符数组中没有 如果主动的在字符数组最后加入 则 此字符数组也可以当成字符串
puts() gets() 输入输出字符串
字符串处理函数:
需要include string.h
strlen() 返回字符串的长度 并不计算字符串最后的’/ 0’
strcpy(dest,src)将src 赋值给 dest 会覆盖dest的值 ‘/ 0’ 会被一起复制
strcmp(str1,str2)比较字符串 从第一个字符开始 按照ascii码的大小比较 如果str1大于str2则返回1,如果str2大于str1则返回-1 如果相等就返回0
strcat(dest,src) 将src连接到dest后面
字符串指针实际就是数组指针
字符指针数组 将字符指针存在在一个数组中
结构:
结构成员的访问:结构变量名.结构成员名 中间以dot (。)来连接
结构指针 结构指针->结构成员 访问结构成员
结构数组:
操作时,结构指针的推后就是数组下标的改变要同时改变如
For(i=0;i<10;i++,p++)//p为结构指针,i为循环计数
{
….;
}