c语言笔记


getchar( );
gets(name[ ]); //getchar放在之前,用于清除上一次数据输入的无用字符(包括\n 回车 空格);

指针指向整型数组和字符型数组的区别:
字符型 char a[5][10]; p=&a[0][0]; char a[5]; p=&a[0];
整型 int a[5][5]; p=&a[0][0]; int a[5]; p=a;
指针指向int二维数组和char二维数组使用上的区别:
int a[5][5]; p=&a[0][0];使用时,整个范围是*p~*(p+24); (25个整数)
char a[5][5]; p=a;使用时,整个数组范围是p~p+4; (5个字符串,p:char(*p)[6]一位数组指针)
指针数组和一维数组指针: char str[5][10], (*p)[10]; p=str; (一维数组的指针)
char str[5][10], *p[5]; p[i]=str[i]; (指针数组, i=0~4)
强调:二维数组名是指向行的,a+1中的1代表一行中全部元素所占的字节数。
一位数组名是指向列的, a[0];
char str[5][10]; char(*p)[10]; p=str; 在进行函数调用时,函数声明部分不能省略[10],如:void hs(char *[10])

char sta[20]; p=str; gets(p);、gets(str);都可。
关于指针的小结:
指针就是地址,凡出现“指针”的地方都可以用“地址”代替,变量的指针就是变量的地址
区别指针和指针变量:
指针:指针是地址,如2008是某一变量的地址,也就是变量的指针
指针变量:指针变量的值就是一个地址
指向:地址就意味着指向,通过地址能找到具体对象
对于指针变量来说,把谁的地址放入变量中,这个指针就指向谁
数据对象在内存中被分配的空间,也就有了地址,也就有了指针,可以定义一些指针变量来存放这些数据对象的地址
void *是一种特殊指针,不知想任何类型的数据,如果要使用,需先对地址进行类型转换




||************函数与指针的运用************||
外部函数:
extern //若省略不写,程序默认为外部函数,可供其他文件调用。
内部函数:
static; 在函数前面加,如static int hs(int a, int b);
指向函数的指针变量:
int (*p)(int ,int); //类型名 (*指针变量名) (函数参数列表)
范围指针值的函数:
int *a(int x, int y);
指针数组和多重指针:
int (*p)[4]; //数组中每一个元素都存放一个地址。
指向指针数据的指针:
int **p; //一般用于指向指针数组
指针数组做main函数的形参
int main(int argc, char *argv[ ]);
指针变量的类型及含义
———————————————————————————————————————————————————

———————————————————————————————————————
| 变量定义 类型表示 含义 |
| int i; int 定义整形变量i |
| int *p; int* 定义p为指向整型数据的指针变量 |
| int a[5]; int [5] 定义a为整型数组,它有5个元素 |
| int *p[4]; int *[4] 定义p为指针数组,有4个指向整型数据的指针元素组成 |
| int (*p)[4]; int(*)[4] p为指向一个包含4个元素的一位数组的指针变量 |
| int f(); int () f为返回值为整型变量的函数 |
| int *p(); int *() 返回值为整型变量指针的函数 |
| int (*p)(); int (*)() 定义p为指向函数的指针变量,返回值为整型变量 |
| int **p; int ** p为指向一个整型指针数据的指针变量 |
| void *p; void * 基类型为void(空类型)的特殊指针变量,不指向任何具体对象 |
——————————————————————————————————————————————————————————————————————————————————————————

指针运算:
p++; p--; p+i; p-i; p+=i;
指针变量赋值:
p=&a; (将变量a的地址赋给p)
p=array; (将数组array的首元素地址赋给p)
p=&array[i]; (将数组array第一个元素地址赋给p)
p=max; (将max函数的入口地址赋给p)
p1=p2; (相同基类型指针变量的赋值)
指针变量可为空:
p=NULL; //不指向任何变量 NULL是个符号常量,代表整数0,已在stdio.h中定义 //if(p==NULL)...


||************建立内存动态分配************||
malloc函数 空间不足时返回NULL
void *malloc(unsigned int size); //malloc(100);
calloc函数 n个长度为size的连续空间,一般较大
void *calloc(unsigned n, unsigned size); //p=calloc(50, 4); 开辟50个4字节的临时分配区域,把起始地址赋给p
fiee函数 释放p指向的动态空间
void free(void *p); //free(p); 释放p所指向的动态空间
realloc函数 已经分配了空间,可使用realloc改变其大小,也叫重新分配
void realloc(void *p, unsigned int size); //realloc(p, 50);
int*p; *p=(int)malloc(5*sizeof(int)); //sizeof可算出int在当前系统中占几

个字符
总结:C99标准把malloc,calloc,realloc函数的及类型定义为void类型,称为“无类型指针”,即不指向哪一种具体的
类型数据,只表示一个抽象的类型的数据,仅提供一个纯地址,而不能指向任何具体的对象。
动态内存分配一般用于链表


||************自定义的数据类型************||
C语言允许用户自己监理由不同类型数据组成的组合型数据结构,成为“结构体” //结构体类型


||************预处理指针的运用************||
#define N 10 //不带参数的宏定义
#define S(a,b) a*a*b //带参数的宏定义
文件包含: #include< > 与 #include" "的区别:......
条件编译:
___________________________________________________________________
#ifdef MM #ifndef MM #if 表达式
#define ...... 程序段1 程序段1
#else #else #else
#define ...... 程序段2 程序段2
#endif #endif #endif







||************字符串的使用方法************||
strcmp(str1, str2);比较两个字符串的函数,返回值为一个正数或负数或0。

用gets(a);和scanf("%s", a);输入字符串的区别:scanf遇空格结束输入,gets()则是遇换行结束。//(a[100])

字符串的引用方式:
char string[ ]="love China"; (初始化时的同时也定义了字符串的长度)
char *a="love China"; //定义字符指针变量,并将字符串第一个元素地址赋给a;
char *fa="a=%d,b=%f"; printf(fa, a, b); //可变格式的输出


||************ C-free 运行错误************||
编译时 出现十六进制乱码
1.某函数声明与函数体不一致。(使用了一个未声明的函数)
2.函数调用语句;


常见错误:
1.无法找到程序,你想手动定位这个程序吗?
int main() 错误。
2.输入数据后无反映,光标闪动:
检查循环语句是否存在错误
3.已停止工作
函数语句用串了;


//辅道题目
善于利用指针:
1.输入3个数,按由小到大的顺序输出。
2.输入3个字符串,按从小到大的顺序输出。
3.输入10个整数,将其中最小的数与第1个数对换,将最大数和最后一个数兑换。
4.有N个数,是前面各数顺序向后移动M个位置,最后m个数变成最前面M个数。
5.N个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号。
6.写一个函数,求一个

字符串的长度,在main函数中输入字符串,并输出其长度。
7.有一字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
8.输入一行文字,找出起重大写字母、小写字母、空格、数字及其他字符各有多少。
9.写一函数,将一个3*3的整型矩阵转置。(纵横转换)
10.将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下),用一函数实现。
11.在主函数中输入10个等长的字符串,用另一函数对他们排序,然后在主函数输入排序结果。(or 用一位数组的指针作为函数实现)
12.(继上)用指针数组处理上一题目,字符串不等长。
13.
14.将n个数按输入时顺序的逆序排列,用函数实现。
15.一个班有4个学生、5门课程,(1).求第一门课程的平均分。 (2).找出有两门以上课程不及格的学生,输出其全部成绩和平均分。
(3).找出平均成绩在90分以上或者全部成绩在85分以上的学生,分别用3个函数实现以上3个要求。
16.输入一个字符串,将其中连续的数字作为一个整数,一次放到一数组a中,并统计有多少个数,输出结果。
17.编写一函数,实现两个字符串比较,即自己写一个strcmp函数,原型为“strcmp(char *p1, char *2)”
18.编写一程序,输入月份号,输出该月的英文月名,例如输入“3”,则输出“March”,要求使用指针数组。
20.用指向指针的指针的方法对5个字符串排序并输出。
21.用指向指针的指针的方法对n个整数串排序并输出,排序单独使用一个函数进行。








相关主题
相关文档
最新文档