基于linux的C语言

本文详细介绍了Linux环境下C语言中指针在函数调用、数组、字符数组、二维数组以及函数指针的使用。同时,讨论了空指针、野指针和万能指针的概念,以及C语言中的auto、static、register、extern和const等关键字的作用和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针在函数中的使用

一,普通函数的调用

//普通函数的调用
#include<stdio.h>


int add(int a,b)
{
	return a+b;

}
int main()
{
	add(1,2)
	
	
	int a = 3,b =4;
	
	add(a,b);
	return 0;
}

二,函数的形式参数为指针类型 

定义形式:返回类型 函数名(指向类型 * 指针名)

//函数的形式参数为指针类型
#include<stdio.h>

void func(int *p)

{
	printf("%d\n",*p);
}

int main()
{
	int a = 3,b =4;
	
	func(&a);
	
	int *z = &b;
	
	func(z);
	
	//return 0;
}

三, 指针在函数数组中的使⽤

//数组
#include<stdio.h>
void func(int *p)
{
	for(int i=0;i<10;i++)
	{
		printf("%d  ",p[i]);    //打印整个数组
	}
	printf("\n");
	
	*p=10;		//代表着下标地址为0的(也就是首地址)的值为10;
	*(p+1)=20;	//代表着下标地址为1的值为20
	p[2]=30;	//代表着下标地址为2的值为30
}

int main()
{
	int buf[10]={1,2,3,4,5,6,7,8,9};
	
	func(buf);
	
	for(int i=0;i<10;i++)
	{
		printf("%d  ",buf[i]);    //打印更改后的数组。
	}
	printf("\n");

	return 0;
}

四, 指针在函数字符数组中的使⽤

1,格式

//字符数组

#include<stdio.h>
void func(char *p)			//指针存储的是字符数组的地址。
{

	
	
}

int main()
{
	char buf[20]="hello world";	//定义一个字符数组
	
	func(buf);
	
	printf("%s ",buf);


	return 0;
}

2,更改其中某个字符。

//字符数组中某个相同字符的修改
#include<stdio.h>
void func(char *p)			//指针存储的是字符数组的地址。
{
	int i=0;
	while(*(p+i) != '\0')
	{
		if(*(p+i)=='l')
		{
			*(p+i)='o';
		}
		i++;
	}
	
	/*
	while(*p != '\0');
	{
		if(*p=='l')
		{
			*p='o';
		}
		p++;
	}
	*/
}

int main()
{
	char buf[20]="hello world";	//定义一个字符数组
	
	func(buf);
	
	printf("%s ",buf);


	return 0;
}

//如果只更改某一个字符利用之前所学的内容在执行完更改后添加break 函数即可跳出这个循环。

五, 指针在函数二维数组中的使⽤

#include<stdio.h>

void func(int (*p)[3] )
{
	*p;		//代表着数组元素的首地址buf[1]
	*(p+1);	//代表着将数组后移一个位置即buf[1]
	* p+1;		//代表着二维数组的第一个元素即buf[0][1]
	for(int j=0;j<2;j++)		//遍历一维数组
	{
		for(int i=0;i<3;i++)	//遍历二维数组
		{
			printf("%d  ",*(*(p+j)+i));	//打印整个二维数组
		}
		printf("\n");
	}

}

int main()
{

	int buf[2][3]={{1,2},{4,5,6}};
	
	func(buf);
}

六,函数指针

        函数指针: ⽤于存储函数地址类型的指针变量

        函数指针的定义: 返回类型 函数名(指向类型 * 指针名)

七,空指针、野指针、万能指针

        1,野指针:

         指针存储的地址不明确(指向的空间不清楚--没有分配不能使⽤),这个地 址对应的空间是否能够在程序中具有操作不清楚。

        2,控制着

        指针记录的地址是0x0这个地址就叫做空指针,系统规定0x0这个地址不 允许任何程序进⾏访问。

        3,万能指针

        不管是哪种类型的指针,都是⽤来存储地址,内存地址⽤多少位来表⽰地址 早就规定好了,每个地址都是相同的位数

         32位机器⽤4B来表⽰地址

        64位机器⽤8B来表⽰地址

        void:空类型,不存在这个对应的类型⼤⼩ 空指针类型,指针类型,⼤⼩就是4B/8B,存储地址 void 叫做万能指针(指向任意类型),可以存储任意类型的地址(指针值), 但是不能取 * 取对应地址中的值 由于是万能指针,可以存储任意类型的地址,也可以把指针值赋值给其他任 意类型的指针变量。

八,关键字

         auto:在局部变量中使⽤,表⽰⾃动存储管理(⾃动分配,⾃动释 放),表⽰在栈区存储局部变量,如果局部变量不加其他的存储类型, 默认添加auto

        定义:(auto) 数据类型 变量名;

         static:静态数据类型,表⽰把数据存储在数据段中的静态区(也叫全 局区)

        static 修饰的是局部变量:就表⽰局部变量不是默认的auto存储(不是 栈存储),变量的⽣命周期不再是语句块结束⽽结束,⽽是整个程序结 束才结束,作⽤于不变还是之前的区域,如果遇到多次创建同⼀个静态 变量,不会重复定义初始化,使⽤之前创建的静态变量

         static 修饰的是全局变量:全局变量只能在本⽂件中使⽤

        static 修饰 函数:函数只能在本⽂件内使⽤

        定义:static 数据类型 变量名;

         register:寄存器存储,把数据存储到cpu内部的存储单元中,在执⾏ 程序时,如果能够存储到cpu中就存储进⾏,在执⾏程序时,cpu的资源 已经被占⽤完,当作普通auto类型存储

        定义:register 数据类型 变量名;

         extern:⽤于提供⼀个全局变量的引⽤,在其他⽂件中定义了⼀个变 量,现在使⽤其他⽂件定义的变量,会把变量名指向⼀个之前定义过的 存储位置 extern 数据类型 变量名;

        注意:如果全局变量或静态变量没有进⾏初始化(由于存储在数据段),⾃ 动把没有进⾏初始化的变量初始化为0。auto局部变量没有进⾏初始 化,则是之前的随机值,不会进⾏初始化

        常量关键字:const const修饰变量,则表⽰变量不可修改,只能访问(只能获取值,不能修 改值) ⼀般只要使⽤const修饰都会完成初始化(定义时赋值)

注意:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值