1.指针与数据关系“
1.指针与变量
2.指针与数组(一维 二维)
3.指针与结构体变量
4.二级指针和多级指针
一级指针变量:专门用于存放普通变量的地址。
eg: int b=200; int* a=&a;
二级指针变量:专门用于存一级指针变量的地址
二级定义变量:类型**变量名
5.指针与函数的关系
C语言:面向过程(模块(函数):功能)
函数分类:自定义函数,系统函数。
5.1调用函数: 函数名(实参列表)
注:调用函数一定要与函数名匹配
5.2:自定义函数:f(x,y)=3x+y
函数类型 函数名(形参列表)
{
函数体 //功能模块的过程描述
}
1.无返回值 无形参
void 函数名(void)
{
}
2.有形参 无返回值
void 函数名 (形参列表)
{
}
1.一级指针作形参:当在被调用函数内需要修改调用函数内的数据时传递地址
2.传递数组:
返回值 函数名(char buf[] 或者 char* buf)
3.结构体作形参:(实参传递参数:值传递)
缺点:不能修改调用函数内的结构体内容
结构体指针作形参:修改指向内容
变量的作用域,生命周期;
1.变量的作用域:能被引用的区间
全局:在函数外定义的变量
作用域:从定义开始,到本文件的程序结束
局部:在函数内定义的变量
作用域:在函数内
2.变量的生命周期:
动态区:auto(只能在函数内定义)
当函数被调用时,空间被申请,当函数运算结束时,空间被释放。
静态区:static变量或者全局变量
堆区:alloc/malloc等申请 free释放
栈:是一种算法思想(先进后出 FILO)
应用:撤消,浏览上一页,恢复
算法:#口
栈顶:能被操作的一端(能进栈/出栈)
栈底:不能被操作的一端(不能进栈/出栈)
操作:每次操作“只能”取/进一个数据
顺序(数组:)栈:数据的容器是一个块数组
功能:
1、初始化栈:initStack
2、进栈: push
注:栈不能为满
3、出栈: pop
4、栈元素的个数:stackLength
5、次栈栈顶元素的:
6、清空栈:ClearStack
7、判断栈为空:IsEmpty
8、判断栈为满 :IsFull
指针与结构体,通过指针修改结构体中的内容
#include<stdio.h>
struct people
{
char name[10];
int id;
};
void fun1(struct people ll)
{
ll.id=12001; 只是修改了ll的内容 不能修改主函数ym的内容
要用指针通过地址来操作
}
void fun(struct people* p)
{
//通过指针修改内容
p->id=2000;
}
void main()
{
struct people ym={1001,"ym"};
fun(&ym);
}
数组做形参,就是指针变量 ,在自定义函数中就直接定义成指针变量
#include<stdio.h>
void swap(int*a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void fun(/*char* pb*/char pb[])
{
*(pb+0)='H';//引用内容
}
void main()
{
int a=1,b=2;
swap(&a,&b);
printf("main: a=%d,b=%d\n",a,b);
fun(buf);//实参 buf名字:首地址
printf("%s\n",buf);
}
定义二级指针,通过二级指针修改结构体属性
#include<stdio.h>
#include<string.h>
struct people
{
int id;
char name[10];
};
void main()
{
定义变量:按类型分配空间
struct people ym={1001,"ym"};
引用变量的属性
printf("%s\n",ym.name);
一级指针变量 类型* 变量名
struct people*p=&ym;
printf("%s\n",p->name);
二级指针变量
struct people **pp=&p
printf("%s\n",(*pp)->name);
通过pp修改自己的名字
strcpy(**pp.name,"ym");
}
字符串的比较,字符串转为整型
#include<stdio.h>
#include<string.h>
int change(char* p)
{
int result=0;
while(*p>='0'&& *p<='9') 判断当前字符是否是数组字符
{
result*=10;
result+=(*p-'0');
p++;
}
return result;
}
比较两个=字符的大小
short strcmp_lf(char *str1,char *str2)
{
int result=0;
while(0==(result=*str1-*str2) && *str1!='\0')
{
str1++;
str2++
}
return result;
}
void main()
{
char s[10]="abd";
char s2[10]="abc";
int a=100;
int result=strcmplf(s,s2);
if(result>0)
{
printf("s>s2\n");
}
else if(result==0)
printf("s==s2\n");
else
printf("s<s2\n");
}