函数和指针
-
处理字符串的方法(需要string.h):strcpy(a,b):把b复制给a;strcat(a,b)。在这里需要注意的是,a,b都是数组如int[]。;strcmp(a,b):把b连到a后面;strcmp(a,b):比较a,b是否相等(a、b既可以是数组,也可以是地址);strupr(a)把字符串变大写,strlwr(a)把字符串变小写,这两个函数不是标准的函数,只能在vc里使用;strlen(a)获取字符串长度(测试sizeof(a),sizeof(a)会返回整个字符串空间的长度;time()获取时间,localtime换位当前时间,使用它时需要time.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32char a[10]="123";
char b[10]="abc";
strcpy(a,b);
printf("a的值为%s",a);
结果:a的值为abc
char a[10]="123";
char b[10]="abc";
strcat(a,b);
printf("a的值为%s",a);
结果:a的值为123abc
char a[10]="123";
char b[10]="abc";
printf("值为%d",strcmp(a,b));
结果:值为-46
char a[40]="13";
printf("a的长度为%d,a的size为%d",strlen(a), sizeof(a));
结果:a的长度为2,a的size为40
time_t now;
time(&now);
t=localtime(&now);
printf("%d-%d-%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday);
结果:2017-3-6 -
C语言中方法叫函数。Main函数返回0表示执行完,返回char和int互通。
-
当把数据作为指针在函数中传过去时:如int a[10];function(int* a);function(a);这样相当于把a[10]的地址传过去,function可以操作a[1]等(测试传普通的int值时报错)
1
2
3
4
5
6
7
8
9
10int a[2]={1,4};
function(a);
printf("%d",a[1]);
int function(int *a){
a[1]=7;
return 0;
}
结果:7 -
内部函数就是static 修饰的函数,内部函数只能在该文件内部使用,外部函数为extern修饰的函数,外部函数可以被其他的文件调用,而不用引入其头文件,但需要在文件中先声明调用的外部函数:如:extern void a();a在另一个文件中,但是也可以直接调用。(在例子中,如果main.c也有叫a的方法,编译报错)
1
2
3
4
5
6
7
8
9
10
11
12文件a.c:
extern int a(){
return 8;
}
main.c:
extern int a();
int main() {
printf("%d",a());
}
结果:8 -
数学函数(需要有头文件<math.h>):abs(int a), labs(long a),fabs(double a)求绝对值,sin(doublea),cos(double a),tan(double a)
-
字符和字符串函数(ctype.h):isalpha(int a)判断是否为字母(a-z/A-Z),isdigit(int a)判断是否为数字,isalnum(int a)判断是否为字母和数字
1
2
3
4
5char a='1';
printf("%d",isalpha(a));
char b='a';
printf("%d",isalpha(b));
结果:01 -
指针变量形式:类型说明 * 变量名;指针变量的赋值:&a 如:int a=4;int * p=&a(int * p;p=&a);表示把a的地址指给p(定义完指针后赋值不需要*)
1
2
3
4
5
6
7
8
9int a=1;
int *p=&a;
int *t=a;
printf("%d\n",p);
printf("%d",t);
结果:
-450497048
123 -
int指针,输入char类型scanf(“%c”,p),输出时为char类型的值
1
2
3
4
5
6int *t;
scanf("%c",t);
printf("%d",*t);
结果:
A
65 -
*变量表示的是指针变量所指向的值,是取值,&变量是表示变量的地址,&是取地址,两者叠加则效果叠加,如&则是先去取地址在去取值
-
指针加减表示地址加减,int类型地址+1,地址进4;当把数组a的首个元素赋值给指针时,就相当于把整个数组赋值给一样。数组赋值指针:int *p;int a[5];p=a(不需要&);p+n表示数组的第n个元素;p++表示指针移到下个数据;p++表示指针的地址移到下个数据,这些都是数组时才行
1
2
3
4
5
6
7
8
9
10
11
12
13int a[5]={1,2,3,4,5};
int *p;
p=a;
printf("%d\n",*(p+1));
p++;
printf("%d\n",p[0]);
(*p)++;
printf("%d\n",p[0]);
结果:
2
2
3 -
指针是二维数组时,(p+n)+m,表示a[n][m]的数据的指针,数据则为*((p+n)+m),无论几维,(p+n)等价于a[n]
-
指向指针的指针:类型标识符 ** 指针变量名如:int ** a,等同于int *(*p)
-
C语言中实参变量和形参变量之间的数据传递是单向的值传递,传递指针变量也是如此,但可以改变指针变量所指向的变量的值