叶圣民//2018.07.17.//C语言指针的使用

学习日志        姓名:叶圣民   日期:2018.07.17.

 

 

 

 

今日学习任务

 

  1. 熟练掌握野指针及如何防止野指针;(消灭野指针)

  2. 熟练掌握多维指针的使用;(n 维指针)

  3. 熟练掌握字符串的操作;(实现并使用字符串处理函数

日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

  1. 指针的定义(指针变量)(*指针运算符)

     指针是一个变量,用来保存地址;

  1. C语言为什么提出指针的类型?

     C语言可以直接访问地址;

(CPU:存储器:寄存器,cache)

  1. 指针的特点:指针在一个CPU 中的地址长度都是同样的32位:4字节长度64位:8字节长度
  2. 存储区域
  3. 作用域
  4. 指针的操作:

     指针一定是相同的类型的指针赋值;

      *(取值运算符) :

         取指针的内存空间内保存的地址对应的内存空间的值

 &(取地址运算符)

局部指针未初始化,该指针师野指针(随机指向地址)

  1. 函数的作用:

    提高代码的复用性——> 实现模块化开发

  1. 函数的语法(三要素:函数名—参数(形参)—返回值)

     ①函数的声明

     ②函数的定义

     ③形参和实参

     ④函数的返回值

 

日开发中出现的问题汇总

 

    指针的使用;指向指针的指针的使用,不太明白原理;

 

 

日未解决问题

 

日开发收获

学会了简单的使用指针表示字符串,字符串的循环输出,指针对指针的赋值;

 

自我评

 

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

 

 

    需要多多练习指针的使用;跟深刻的理解指针的原理;

 

一、输出各个类型的指针的字节长度

#include <stdio.h>

int main()
{
    


    printf("char_len * = %2d\n",sizeof(char *));

    printf("int_len * = %2d\n",sizeof(int *));

    printf("short_len * = %2d\n",sizeof(short *));

    printf("long_len * = %2d\n",sizeof(long *));

    printf("float_len * = %2d\n",sizeof(float *));

    printf("double_len * = %2d\n",sizeof(double *));
    
    return 0;
}

 

 

二、循环输出键盘读取的字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN sizeof(char)*50

int main()
{
    char * ptr = (char *) malloc(MAX_LEN);

    char * temp = ptr;
    
    if(ptr != NULL)
    {

        memset(ptr,0,MAX_LEN);
        scanf("%s",ptr);

	temp = ptr;

        while(*temp != '\0')
        {
            printf("%c\n",*temp);
	    temp++;
        }
	free(ptr);
	ptr = NULL;
    }
    else
    {
        printf("malloc error!\n");
	exit(1);
    }
    return 0;
}

 

三、

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN sizeof(char)*100

int main()
{
    char *ptr = (char *) malloc(MAX_LEN);
    char *p = (char *) malloc(MAX_LEN);

    char *temp = ptr;
    int count = 0;
    int max = 0;
    int i;
//    char q;

    char *temp1 = p;
    //char s;

    if(ptr == NULL || p == NULL)
    {
        printf("malloc error!\n");
	exit(1);
    }
    memset(ptr,0,MAX_LEN);
    memset(p,0,MAX_LEN);

    printf("Please input string:\n");
    scanf("%s",ptr);
    temp = ptr;
#if 0
    while(1)
    {
#endif
        while(*temp != '\0')
        {
	    if((*temp >= '0') && (*temp <= '9'))
	    {
	        count++;
	        if(count > max)
	        {
	            max = count;
		    temp1 = p;

		    for(i = 0;i < max;i++)
		    {
			*(p + i) = *(temp - max + i + 1);
		    }
		    *(p + i) = '\0';
		}
	    }
	
	    else
	    {
	        count = 0;
	    }
            temp++;
        }
        
	printf("The length = %d\n",max);

	printf("result = %s\n",temp1);

	#if 0

	printf("quit?(y/n)\n");
	scanf("%c",&q);
	if(q == 'y')
	{
	    goto out;
	}
        
	printf("Please input string:\n");
        scanf("%s",ptr);
	#endif
   // }
#if 0    
out:
    printf("quit!\n");
#endif
	
	free(ptr);

	free(p);

	p = NULL;

        ptr = NULL;
    //}	
    

    return 0;
}

 

四、子函数的定义(未完成)

#include <stdio.h>

typedef signed int Int;

void exchange(Int number1,Int number2)
{
    Int number;

    number = number1;
    number1 = number2;
    number2 = number;
}



int main()
{
    Int number1;
    Int number2;

    printf("输入两个数交换数值\n");

    printf("请输入数值 1 :");
    scanf("%d",&number1);

    printf("请输入数值 2:");
    scanf("%d",&number2);

    exchange(number1,number2);

    printf("number1 = %d\n",number1);
    printf("number2 = %d\n",number2);


    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/qq_31421117/article/details/81085317