static的两个要点:1、修饰全局变量时,改变变量的作用域,不能被其他文件调用这能被当前文件调用;2修饰局部变量时可以改变变量周期,知道程序结束时才释放栈空间,被static修饰的局部变量存放在静态数据区。
printf()这个函数用的时候最好都加上\n换行,因为\n不仅有换行的作用,还有刷新缓冲区的作用;或者用完之后用fflush(stdout)函数。
头文件中#include<stdio.h>与#include"stdio.h"的区别,前者是由tc指定目录去寻找,而后者只寻找当前目录。
宏函数的定义方式:#define out printf("hello\n") 关于 宏定义函数与普通函数的优缺点如下:
宏函数优点:不占用空间;缺点:编译时间长;没有语法检查,不安全。
自定义函数:优点:有语法检查;缺点:占空间主要表现在自定义函数需要给形参分配地址空间。
指针:所有的指针都占用4个字节的地址空间,只不过不同类型的指针他们每次访问移动的地址不同;*p++ 是先取指针里面的内容然后对指针进行加一,不同于(*p)++是对里面的内容进行加一操作;
定义指针时不能 int *p;即不能定义野指针,必须要给他们指向一个地址或者给他们分配空间比如:int *p; p = (int*)malloc(sizeof(char)*32);意思是给这个指针分配了32个字节的空间;用malloc()函数时,需要加上一个头文件#include<stdlib.h>
*(a+i) = a[i];
还有指针数组如 char *str[] = {"helloworld!", "welcome to our home"}; 其中每个元素指针指向每个字符串的首地址,如果要打印可以按元素来打印;
今天的编程题:该题目的是通过指针来设计一个能复制字符串的函数;让指针取内容依次传递达到最终复制的作用。有几个注意的点①循环时要利用字符串末尾都是\0设置循环条件;要想有返回值应当设置一个指针去获取原本字符指针的地址;
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 char mystrcpy (char *str, char *ptr)
5 {
6 int i;
7 char *tmp = str;
8 for(i = 0; *str != '\0'; i++)
9 {
10 *str = *ptr;
11 ptr++;
12 str++;
13 }
14
15 return *tmp;
16 }
17 int main()
18 {
19 char str[20] = "helloworld";
20 char ptr[20] = "world";
21 *str = mystrcpy(str,ptr);
22 printf("str = %s\n",str);
35 return 0;
36
37 }
第二题:自行设计一个函数要求实现字符串翻转的功能,代码如下:需要注意的一点是利用strlen()来计算字符串的长度减少循环长度。
5 void string_revese(char*str,char*ptr)
6 {
7 int len, i;
8 len = strlen(str);
9 for(i = 0; i < len;i++)
10 {
11 *ptr = *(str + len - 1 - i);
12 ptr++;
13 }
14 }