zoukankan      html  css  js  c++  java
  • C博客作业05--指针

    0.展示PTA总分


    1.本章学习总结

    1.1 学习内容总结

    1.* 为指针标识符。 如:*p

    格式:datatype name = value; //定义格式
    int p; //定义,定义时必须带
    float p1 = &a;
    char p2 = &c;
    p1 = &b;
    p2 = &d; //赋值,在定义的同时赋值需要带
    ,单独赋值时不能带
    ,因为P代表指针变量的值,即地址。
    P代表指针指针变量指向的变量的值。

    • 通过指针变量可以获取内存上的数据,也可以修改内存上的数据(P=&a;*p=b;)
    • *p 代表的是 a 中的数据,它等价于 a,可以将另外的一份数据赋值给它,也可以将它赋值给另外的一个变量。
    • 在不同的场景下有不同的作用:
    • 可以用在指针变量的定义中,表明这是一个指针变量,以和普通变量区分开;
      使用指针变量时在前面加*表示获取指针指向的数据,或者说表示的是指针指向的数据本身。
    • 在32位操作系统下都在0 ~ 4,294,967,295这个数区间内,所以:在32位操作系统下,任何类型的指针变量都占四个字节

    2.字符指针和字符数组的区别:

    • 数组形式:
      char string[] = “hello world";
    • 字符指针形式:
      char *str = “hello world";
    • 1、储存方式:
      (1)字符数组由若干元素组成,每个元素存放一个字符,
      (2)而字符指针变量只存放字符串的首地址,不是整个字符串。
    • 2、存储位置:
      (1)数组是在内存中开辟了一段空间存放字符串;
      (2)而字符指针是在文字常量区开辟了一段空间存放字符串,将字符串的首地址付给指针变量str。
    • 3、可否被修改:
      (1)指针变量指向的字符串内容不能被修改,但指针变量的值(即存放的地址或者指向)是可以被修改的;
      (2)字符串数组内容可以被修改,但字符串数组名所代表的字符串首地址不能被修改

    3.指向函数的指针(函数指针):

    一个函数在编译时被分派一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。
    其声明格式为:返回值类型 (fun_ptr)(参数列表)
    如 int (
    p)(int a, int b); p是一个指针变量,它指向一个函数,这个函数有2个整型参数,函数返回值类型为int。p首先和*结合,说明p是一个指针,然后再与()结合,说明它指向的是一个函数,指向函数的指针即为函数指针。

    4.返回指针值的函数:指针函数

    返回指针的函数:一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址;
    定义形式为:类型名 *函数名(参数表列); 例如:int a(int x,int y); 注意与指针函数int (a)(int x,int y)不合。
    注意:在挪用时要先定义一个适当的指针来接收函数的返回值,这个适当的指针其类型应为函数返回指针所指向的类型。
    例:pc = (char *)malloc(100);暗示分派100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针付与指针变量pcchar *pc=NULL;pc = (char *)malloc(100);void类型的指针void指针是一种很特另外指针,其实不指定它是指向哪一种类型的数据,而是根据需要转换为所需数据类型。

    1.2 本章学习体会

    指针果然是C语言的灵魂,其作用十分巨大,但是学习起来也难度不小,刚刚接触时还很蒙圈,再加上这周事情特多都没复习导致更加难以理解,还好利用空余时间复习并敲了一些PTA题目,现在总算对指针有了一定了解,但是想要深入还要继续应用实践。


    2.PTA实验作业

    2.1 7-1(指针做函数返回值) 查找指定字符

    2.1.1伪代码

    
    
    定义一个函数char* fin(char* str,char op)
    定义两个字符型变量op,ch用来储存想要查找的字符和吸收‘
    ’
    定义一个字符数组,
    用fgets读入字符串,并在字符串的最后加上‘0’。
    向函数fin传入str首地址和字符op,
    在函数中遍历数组,计录指针的偏移量
    if(条件不满足)返回NULL
    else返回str+偏移量
    if(条件满足)输出Not Found
    else输出下标。
    
    

    2.1.2 代码截图

    2.1.3 总结本题的知识点

    ch 储存多余‘n’
    fgets读入字符串,最后要记得赋零
    指针做函数返回值的函数的写法
    下标偏移量和指针位置的关系

    2.1.4 PTA提交列表及说明

    提交列表说明:

    1:没有考虑到第一个就符合的情况
    2:第一个就返回的判断错误
    3:格式错误(其实前几个错误就有了。。。)按题目要求改了一下就过了

    2.2 6-9 合并两个有序数组(2)

    2.2.1伪代码

    
    根据传入的参数
    定义一个整型指针p指向首地址
    for i 0 to n step 1 do
    将数组n接到数组m后面
    end
    for i 0 to m+n-1 step 1 do
    {
       for j i to m+n step 1 do
       找出最小值的指针将它和第一个交换
       end
    }//将合并的数组从小到大排序
    end
    
    
    

    2.2.2 代码截图

    2.2.3 总结本题的知识点

    数组的合并
    选择法排序
    指针操作数组内容

    2.2.4 PTA提交列表及说明

    提交列表说明:

    1:用我自己先合并再排序的方法,发现数据量太大时会超时
    2:用同学在定义一个数组,在同时移动指针排序,用空间换时间超时的测试点就过了

    2.3 6-4 求出数组中最大数和次最大数

    2.3.1伪代码

    定义一个整型变量max储存最大值的偏移量
    for i 1 to n step 1 do
       找出最大值的偏移量
    end
    和a[0]交换
    for i 2 to n step 1 do
       找出次小值的偏移量
    end
    和a[1]交换 
    
    
    

    2.3.2 代码截图

    2.3.3 总结本题的知识点

    用循环找最大
    用指针操作交换数组中的两个数

    2.3.4 PTA提交列表及说明

    提交列表说明:

    1:没有交换直接将找到的最大值赋给a[0],导致原来的还在
    2:交换是写反了导致两个位置相同

    3.阅读代码

    
    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int i,j,k,n=9;
    	char c='A'-1;	
    	for(i=1;i<=2*n-1;i++)
    	{
    		k=n-abs(n-i);
    	
    		for(j=1;j<=abs(n-i)+1;j++)
    	
    		{printf("+");} 
    		for(j=1;j<=2*k-1;j++)
    		{c++;
    		printf("%c",c);
    		if(c=='Z')
    			c=c-26;
    			}for(j=1;j<=abs(n-i)+1;j++)
    		{
    			printf("+");
    		}
    	printf("
    ");
    	}
    	return 0;
    }
    
    
    

    效果:

    abs函数(针对整型的绝对值函数)用以处理菱形问题十分方便

  • 相关阅读:
    byte在计算机中的存储方式--Double.byteValue()的输出结果思考
    启动Eclipse时An internal error occurred during: "Initializing Java Tooling".错误
    java实现两个int数交换
    cmd编译运行java
    java配置环境变量
    使用jQuery获取session中存储的list集合
    搭建ssm框架,可实现登录和数据展示以及增删改查
    java 生成UUID
    jQuery serialize()方法获取不到数据,alert结果为空
    SpringMVC架构的项目,js,css等静态文件导入有问题
  • 原文地址:https://www.cnblogs.com/19wangluo-Lishaoqiang/p/11966096.html
Copyright © 2011-2022 走看看