zoukankan      html  css  js  c++  java
  • 《黑马程序员》 ★指针练习★ (C语言)

    指针的基本概念:

    重要性:

    如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。-----引用李明杰老师的一句话

    格式:

    变量类型  * 变量名            例:int *p;   作用:能够根据1个地址值访问并修改对对应的存储空间

    使用:

    代码联系1

    #include <stdio.h>
    int main()
    {
      int a = 80;              //定义一个整形变量a且赋值80;
      int *p;                  //定义一个int型指针变量*p
      p = &a;                  //取得变量a的地址并且赋给指针p
      *p = 10;                 //对p所指向的存储空间(也就是a)赋值
      printf("a = %d",a);      //输出变量a的值
      return 0;
    }
    运行结果:a = 10

     int *p中的*是指针的标志

    p = &a;    指针变量只能存储地址   

    int *p;     指针变量p前面定义了int,说明指针只能指向int 型数据

    代码练习2

    #include <stdio.h>
    //通过使用指针改变变量a的值
    int change(int *n)
    {
      *n = 10;                    //对n所指向的存储空间(也就是a)赋值
    }
    
    int main()
    {
      int a = 80;                //定义一个整形变量a且赋值80;
      change(&a);                //调用change函数,把变量a的地址送给change函数的形参
      printf("a = %d",a);        //输出变量a的值
      return 0;
    }
    
    运行结果:a = 10

    注:如果不利用指针则无法在change函数内修改main函数中变量a的值

     使用注意:

    int main()
    {
    	int *p;
    	double d = 3.2;
    	p = &d;                    // 错误原因:int *p只能指向int类型的数据
    
    	int *p;
    	p = 200;                   //错误原因:指针变量只能存储地址
    
    	int *p;
    	printf("%d
    ",*p);         //指针变量未经初始化,不能直接访问其他的存储空间
    
    	int *p;
    	*p = &a;                   //错误写法
    }
    

    指向指针的指针:

    int main()
    {
           int a = 20;               //定义并向a赋值
           int *p = &a;              //取得a的值并赋给指针p 
           int **pp = &p;            //取得p的值并赋给指针pp
           **pp = 30;                //对指针pp所指向的存储空间赋值
           printf("a = %d
    ",**pp);  //输出变量a的值
           return 0;
    }
    运行结果:a = 30
    

    注:指针在任何类型下都是占用8个字节

    二、指针和数组

    1.数组的访问方式:

    数组名【下标】           例:ages[i];

    指针变量名【下标】     例:p[i];  //前提是指针变量P指向数组

    例:int ages[3] = {41,52,95};

         int *p;

         p = ages;     // 数组名就是数组首元素的地址,此行代码表示把数组元素地址赋给指针p   

    使用指针遍历数组内各元素:

    2.指针变量的+1究竟地址会加几取决于指针变量的类型

    int *p                p+1相当于地址值+4;

    char *p             p+1相当于地址值+1;

    double *p          p+1相当于地址值+8;

    int main()
    {
    int ages[5] = {10,8,91,64,7}; int *p; p = &ages[0]; for(int i = 0;i <= 4;i++) { printf("ages[%d] = %d ",i,*(p+i)); } return 0; }
    运行结果:
    ages[0] = 10
    ages[1] = 8
    ages[2] = 91
    ages[3] = 64
    ages[4] = 7

     解析:指针p指向ages[0]    p+1则指向ages[1]

      三、指针与字符串  

    定义字符串的方式: 

    char s[] = "itcast";

    char *s = "itcast"       指针s指向字符串的首元素地址

    char *s;

    *s ="itcast" 

            char *buf = "it";//指针变量buf指向了字符串的首地址
    	printf("*buf = %c
    ",*buf);
    	printf("buf = %s
    ",buf);//
    

     运行结果: buf =i                 

                    buf =it             %s遇到才会停止

    返回指针的函数:

    类型名 函数名(参数列表)

    char *test();      代表函数返回char类型的数据

    #include <stdio.h>
    char *test();                             //函数声明
    int main()
    {
    	char *name =test();              //定义一个字符串并且调用指针函数
    	printf("name = %s
    ",name);      //输出字符串name内元素
    	return 0; 
    }
    char *test()
    {
    	return "rose";
    }
    

      

    指向函数的指针:

    函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

    #include <stdio.h>
    void test();
    int main()
    {
    	//(*p)是固定写法,代表指针变量p将来肯定指向函数
    	//左边的void ,代表变量p指向的函数没有函数值
    	//右边的():指针变量p指向的函数没有形参
    	void (*p)();
    	//指针变量p指向了test函数
    	p = test;     //把函数覅只赋给指针p
    	(*p)();       //简介调用函数test 
    	test();       //直接调用函数test
    	p();
    
    	return 0;
    }
    void test()
    {
    	return "rose";
    }
    

      

      

  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/shtz/p/4420036.html
Copyright © 2011-2022 走看看