指针与数组,结构体 ,二级指针的应用

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");
		
}
	


                
                
                

猜你喜欢

转载自blog.csdn.net/weixin_40989362/article/details/81208744
今日推荐