24.08.08

day8

1.一级指针与二维数组的关系

	二维数组的数组名代表行地址

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

//指针指向二维数组  第0行 第0个元素
int *p = &a[0][0];    //int *p = a[0];

//指针指向  第1行 第0个元素
int *p = a[1];



利用一级指针遍历二维数组
  
    int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	int *p = a[0];   //int *p = &a[0][0];
    
    int i;
    for(i = 0; i < 12; i++)
    {
        printf("%d\t", p[i]);
    }

练习

1.对二维数组整体进行冒泡排序
     int a[3][4] = {  1,99,80,66,
                      20,88,7,44,
                      55,33,88,20    
                   }

行指针(数组指针)

	是一个指针,指向元素为一维数组。
    二维数组的数组名代表行指针(行地址),首行的地址


一般形式:
    存储类型  数据类型  (*指针变量名)[元素个数];
    
eg:
     int a[3][4] = {1,2,3,4,
                    5,6,7,8,
                    9,10,11,12};   
     int (*p)[4] = a; 	



&  *: 升维   降维  
    
     int (*p)[4] = &a[0]; 
     //int (*p)[4] = &a[1]; 

行指针与二维数组

	int a[3][4] = {1,2,3,4,
                    5,6,7,8,
                    9,10,11,12}; 
    
    //让行指针指向二维数组的首行
    int (*p)[4] = a;  
	int (*p)[4] = &a[0];


   //让行指针指向二维数组的第1行 
    int (*p)[4] = &a[1];
    int (*p)[4] = a + 1;



利用行指针遍历二维数组:
    
    
    
    int a[3][4] = {1,2,3,4,
                    5,6,7,8,
                    9,10,11,12};    
    //让行指针指向二维数组的首行
    int (*p)[4] = a;  


    int i, j;
	for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 4; j++)
        {
            printf("%d\t", *(*(p + i) + j) );    //p[i][j]      (*(p + i))[j]
        }
        puts("");
    }  

练习

1.实现遍历二维数组,找出最大值及其下标
 int a[3][4] = {1,2,3,4,
                    5,6,7,8,
                    9,10,11,12};
     int (*p)[4];
     p = a;


     int max_h = 0, max_l = 0;

     int i, j;
     for(i = 0; i < 3; i++)
     {
        for(j = 0; j < 4; j++)
        {
            if(p[i][j] > p[max_h][max_l])
            {
                max_h = i;
                max_l = j;
            }
        }
     }


    printf("the max num is: a[%d][%d] = %d\n", max_h, max_l, p[max_h][max_l]);

行指针与一维数组

	
	int a[6] = {1,2,3,4,5,6};
	
    int (*p)[6] = &a;


    *(*p + i)  ==    (*p)[i]	==   *(*(p + 0) + i)  ==  p[0][i]

练习

1.实现遍历一维数组,累加求和
   int a[6] = {1,2,3,4,5,6};
   int (*p)[6] = &a;

	int i,sum = 0;
	for(i = 0; i < 6; i++)
    {
        sum += p[0][i];
    }

	printf("sum=%d\n", sum);

一级指针与行指针

一级指针:
    	int a = 10;        &a      int *
        char ch = 'a';     &ch     char *


        一维数组的数组名 --  数组首元素(变量)的地址     
        a  == &a[0]    int*       
            
        int a[5] = {1,2,3,4,5};    
		&a[0]     int *
        &a[1]     int *
            

  
            
       二维数组     
       int a[2][3] = {1,2,3,
                      4,5,6}; 
	   &a[0][0]     int *
       a[0] == &a[0][0]   int*   
		

           
行指针(数组指针):
        一维数组的数组名 --  数组首元素(变量)的地址          
        int a[5] = {1,2,3,4,5}; 
        int (*p)[5] =  &a;


        二维数组数组名代表首行的地址,行地址,行指针
        int a[2][3] = {1,2,3,
                       4,5,6}; 
	    int (*p)[3] = a;
		int (*p)[3] = &a[0];
		int (*p)[3] = &a[1];	          

特殊的指针

1.野指针:指向不明确的指针,一用就段错误    
    int *p;
    
    
2.空指针:执行零地址(NULL)的指针,一用就段错误
    int *p = NULLif(p != NULL)
    {
        
    }

作业


1.思考题
    1. 将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机,新数组以44列的方式输出,
    
2.编程题
    1.删除字符串中的, 所有目标字串
    
    2. 某无序一维数组arr[N]中,将数组中的奇数和偶数分开,并排序输出到一个2行的二维数组中,第一行存放奇数,第二行存放偶数,二维数组原本全部存放-1。如int arr[N] = {1,2,3,4,56,43,22,12,……};    
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值