1.关于指针作为函数参数传递的内容理解
//例程如下,该例程运行之后,可以对比理解。
//对于GetMemory函数,二级指针自己类比理解。关键是区别此处为什么用二级指针,却//不能用一级指针。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
void GetMemory(char **p, int size)
{
(*p) = (char *)malloc(sizeof(char) * size);
}
//此处的p仅仅相当于是,传来的实参的一个拷贝。因此,p++不会改变实参,仅仅修改了形参。
//但是,因为p本身是一个指针,因此和实参指向的地址是一样的。所以*p可以修改了实参指向地//址的值。
void change(char * p)
{
*p = '#';
p ++;
//
printf("\n----------------------\n");
printf("p = %s\n",p);
}
void main(void)
{
char ch[13] = "Hello World!";
char * p = &ch[3];
printf("ch = %s\n",ch);
printf("p = %s\n",p);
printf("\n");
change(p);
printf("\n");
printf("ch = %s\n",ch);
printf("p = %s\n",p);
system("pause");
}
1. static、extern的用法
static在文件中*.h中定义,则在调用*.h时,在每个包含*.h中的*.c文件都有一份该变量自己的拷贝,相当于都在各自*.c文件中定义,占有各自的空间。相互之间各用各的。
【优点】相互之间不会干扰 【缺点】占用内存
-----------------PS:优缺点都是相对而言的
extern则需要变量在某一个*.c中定义,在*.h(或在其他用到该变量的*.c文件中)用extern再次进行变量的声明,则可以在其他*.c中调用。这种情况下,仅仅占据一份内存。
【优点】仅仅占据一份内存 【缺点】要考虑变量在什么地方被修改了。
-----------------PS:优缺点都是相对而言的