首页 > 系统相关 >自学linux第十五天:二维数组的指针

自学linux第十五天:二维数组的指针

时间:2024-08-12 22:24:45浏览次数:12  
标签:函数 int char 地址 数组 linux 第十五天 指针

二位字符型数组:

char s[][10] = {"hello","world","china"};

1.定义指针:


char (*p)[10] = s;这样定义表示为   p指向二维数组s 

                                *(*(p+i)+j)  表示二维数组中的s[i][j]元素

char s[10] = "hello";//存放字符串数据 s的数据类型 char[10]

char[10] s1[3]; //二维数组 //此时的二维数组的元素 是一个一维字符型数组 
                //定义一个存放 字符串 的一维数组 


char *p = "hello"; //p的类型 char *  
                   //char *的指针变量p 相当于代表一个字符串 

                   
char *p1 = "hello";
char *p2 = "world";
char *p3 = "china";

char* pstr[3]= {"hello","world","china"}; //数组中存放是 各个字符串的地址 也就是说数组中的每一个元素就是各个字符串的地址


                                                                     
 2、定义一个指针指向指针针的数组
char* MMAX(char* *p,int len)
{
	char ret = 0;
	int i = 0;
	char *max = *p;
	for(i = 1;i < len ;i++)
	{
		if(strcmp(*(p+i),max) > 0)
			max = *(p+i);

	}
	return max;
}

void *RE(char**begin,char**end)
{
	char *t = *begin;
	while(begin<end)
	{
		t = *begin;
		*begin = *end;
		*end= t;
		begin++;
		end--;
	}
}


void *bubble(char**p,int len)
{
	int i = 0;
	int j = 0;

	for(i = len;i >0;--i)
	{
		for(j = 0;j<i;j++ )
		{
			if(strcmp(*p+j , *p+j+1) < 0)
			{
				char *temp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp;
			}
		}
	}
}


char **q = pstr; //q 二级指针 

char*是基类型 *是表示begin是一个指针变量 而 begin是变量名

3. 指针操作函数


-----------------------------------------
int a;
int *p = &a; 
语法:
基类型 * 指针变量名 
------------------------------------------
指针 + 函数:

通过指针 的方式 来调用函数 


函数名 --- 代表函数的入口地址 

int add(int a,int b) // 函数  
                     // 函数名 - 代表函数的入口地址 
                     // 函数名对应的数据类型 
                     // int (int a,int b) //函数类型 
                     // 代表一类函数
                     // 返回值为int型
                     // 带有两个int型的形参变量 
                     
说明:
 1.可以定义一个函数类型的指针变量 
   来保存函数的入口地址 
 2.有了这个指针变量 
   通过指针变量 进行函数调用 
   
   
回调函数  callback


func1()
{
}
func2()
{
}


choieSort(int *a,int len,int (*p)(int))
{
  
  //func1 
   
}

main()
{
  choiceSort(a,len,func1);


//回调函数 --- 通过函数指针调用函数 就是回调 
//c语言中,使用了 函数指针 实现回调 
-------------------------------------------------------------

4.总结:


1.指针 
  指针概念 
  指针的定义  //基类型 * 变量名 
  指针的初始化 和 赋值 
             //野指针 NULL
  指针引用  
           *p  //理解 间接运算的过程 及 结果
  
  核心用途 
          被调修改主调 
          使用方法:
          1.要修改谁,把谁的地址传过去 
          2.被调函数中,一定要有对应的 *p运算 
          3.传过去的实参地址,一定要对应一块有效的内存空间 
-------------------------------------------------------------
2.指针 + 数组 
  指针 操作 一维整型数组 
  指针 操作 一维字符型数组 
  
  核心思路:
     1.定义一个什么类型的指针变量  
                            //参考第2点 
     2.获得那个位置的地址  //数组的特点 
                           //数组首元素的地址 &a[0]   //就是数组名 


   指针操作数组元素的过程:
     指针运算 
     
     p+1 
     *p  
     
  知识点:
  1.快速排序 
  2.const 
  3.void
  4.字符串相关的函数 
    strlen
    strcpy/strncpy
    strcat/strncat
    strcmp/strncmp 
--------------------------- ------------------------------------------
指针 + 二维数组 
 1.二维数组本质 ---一维数组  
 2.数组的特点 
 3.指针类型的定义 
 4.指针访问数组元素的 过程  
   *(*(p+i) + j)
 指针 + 指针数组 //
 指针 + 函数 
----------------------------------------------------------------------
 

标签:函数,int,char,地址,数组,linux,第十五天,指针
From: https://blog.csdn.net/2302_78620228/article/details/141036729

相关文章

  • Linux系统中的管道命令、grep命令、sed命令和awk命令
    本章将和大家分享Linux系统中的管道命令、grep命令、sed命令和awk命令。废话不多说,下面我们直接进入主题。一、管道命令Linux中的管道命令(pipe)是一种非常强大的特性,它允许你将一个命令的输出作为另一个命令的输入。管道命令极大地增强了命令行的灵活性和功能,使得复杂的数据处理......
  • Linux进程和计划任务管理
    目录一、进程基本概念1.进程2.程序和进程的关系 二、查看进程信息1.ps命令1.1 psaux命令1.2ps-elf命令 2.top命令 3.pgrep命令 4.jobs命令 三、查看进程树 四、进程的启动方式1.手动启动2.调度启动五、终止进程的运行1.Ctrl+C组合键2.kill......
  • 长度最小的子数组 | LeetCode-209 | 双指针+滑动窗口 | 前缀和+二分查找 | Java详细注
    ......
  • Linux Centos通过mail向QQ邮箱发邮件
    1.配置1.1如果是配置全局文件,则编辑/etc/mail.rc1.2如果是配置当前用户,则编辑~/.mailrc2.配置文件内容#这里填入smtp地址,这里的xxx为qq或者163等,如果用的云服务器,安全组策略要开放465/25端口,入站和出站都要开放该端口setsmtp=smtp.qq.com:587#设置发信人邮箱和昵称(......
  • 一口气介绍25个Linux的基础指令
    ......
  • 10 - Linux系统安全及应用
    目录一、账号安全控制1.系统账号清理2.密码安全控制3.命令历史限制4.终端自动注销二、用户切换和用户提权1.su命令-切换用户1.1su命令的用途及用法1.2 限制使用su命令的用户1.3 查看su操作记录2.sudo命令-用户提权2.1sudo命令的用途及用法2.2配......
  • 【Linux系列】内核参数
    sysctl命令常用参数RAID性能参数调优网络协议栈调整:单位是字节TCP并发性能优化对于用不上IPV6的建议直接禁用TCPkeepalive时长控制memoryOOM控制安全防护模块保障TCP通信质量IO密集性服务器优化参数路由器选项控制路由机制控制内存大页面使用策略内核参数主要......
  • Linux防火墙基础Firewalld
     简介    Firewalld是一个用于CentOS、Fedora和RedHatEnterpriseLinux(RHEL)等系统的动态防火墙管理工具。它是iptables的前端工具,可以帮助用户配置和管理Linux系统上的防火墙规则。    Firewalld防火墙是一种简单的、有状态的、基于区域(zone)的防火墙。......
  • 指针4.指针变量(附编程习题)
    今天来归纳一下指针变量,及了解typedef关键字和二维数组传参本质目录1.字符指针变量2.数组指针变量2.1概念2.2数组指针初始化3.函数指针变量4.函数指针数组5.二维数组传参6.typedef练习1.计算器的一般实现代码运行结果2.找单身狗2代码3.获得月份天数代码运行结果......
  • 重头开始嵌入式第十八天(Linux系统编程 文件IO)
    Linux系统编程内容Linux系统编程涵盖了众多方面的知识和技术: 1. 文件I/O操作:包括打开、读取、写入、关闭文件,以及处理文件的权限、属性等。2. 进程管理:创建新进程、进程的终止、等待进程结束、进程的执行状态控制等。3. 信号处理:接收和处理系统发送的各种信号,以响......