zoukankan      html  css  js  c++  java
  • C和指针小结(C/C++程序设计)

    C和指针

    相关基础知识:内存的分配(谭浩强版)

    1、整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么)

    2、int *p,指向整型数据的指针变量。

    3、通过指针变量访问整型变量。

    4、*p :指针变量p指向的存储单元(变量)

    5、p = &a——>> *p = *&a

    6、用指针作函数参数

    7、调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参。

    8、引用一个数组元素可以用(1)下标法(2)指针法(占内存小,运行速度快)

    9、指针提高效率在那些方面?(内存,运行时间??)

    10、如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。

    11、用指针变量作函数形参接受数组地址。数组指针和指针数组的区别

     1 #include"iostream"
     2  using namespace std;
     3  int main()
     4  {
     5      void sort(int *p,int n);
     6      int a[5],i;
     7      cout<<"input array:"<<endl;
     8      for(i=0;i<5;i++)
     9      cin>>a[i];
    10      cout<<endl;
    11      sort(a,5);
    12      cout<<" the sorted array:"<<endl;
    13      for(i=0;i<5;i++)
    14      cout<<a[i]<<" ";
    15      cout<<endl;
    16      return 0;
    17  }
    18  
    19  void sort(int *p,int n)
    20  {
    21      int i,j,k,temp;
    22      for(i=0;i<n-1;i++)
    23      {
    24          k=i;
    25          for(j=i+1;j<n;j++)
    26          if(*(p+j)<*(p+k)) k=j;
    27          temp=*(p+k);
    28          *(p+k)=*(p+i);
    29          *(p+i)=temp;
    30      }
    31  }
    View Code

    12、一个int占多少个字节?原文链接

    13、实参和形参的结合有一下4种形式:

    实参 形参
    数组名 数组名
    数组名 指针变量
    指针变量 数组名
    指针变量 指针变量

    14、实参数组名a代表一个固定的地址,或者说是指针常量,因此其值不可改变;形参数组名是指针变量,可以改变。

          //  a++ //语法错误,不可改变

    15、字符串与指针。字符串数组/字符串变量/字符指针 存放字符串。

     1 //test_3 指针存放字符串
     2  #include<iostream>
     3  using namespace std;
     4 // #include<string> //字符串变量 
     5  int main()
     6  {
     7      char str1[]="I Love C++",str2[20],*p1,*p2;
     8      p1=str1;
     9      p2=str2;
    10     for(;*p1!='';p1++,p2++)
    11     *p2=*p1;
    12     *p2='';
    13     p1=str1;
    14     p2=str2;
    15     cout<<"str1 is "<<p1<<endl;
    16     cout<<"str2 is "<<p2<<endl;
    17     return 0; 
    18   } 
    View Code

    16、函数与指针。函数的入口地址就称为函数的指针。

      1)、用函数指针调用函数

        函数类型 (*变量名)(函数形参表)

     1 #include<iostream>
     2 using namespace std;
     3 
     4  int main()
     5  {
     6      int max(int x, int y);
     7      int (*p)(int,int);
     8      int a,b,m;
     9      p=max;
    10      cin>>a>>b;
    11      m=p(a,b);
    12      
    13     cout<<"max is "<< m<<endl;
    14     return 0;
    15   } 
    16   
    17   int max(int x,int y)
    18   {
    19       int z;
    20       if (x<y)
    21       z=y;
    22       else
    23       z=x;
    24       return(z);
    25   }
    View Code

      2)、用指向函数的指针作函数参数。

      3)、返回指针值的函数:指针函数。

        类型名 *函数名(参数列表);int *a( int x,int y);

    17、

       1)、指向常量的指针(不允许通过指针变量修改它指向的对象的值)

         const 类型名 *指针变量名

       2)、常指针(指定指针变量的值为常量,即指针变量的指向不可改变)

          类型名 *const 指针变量名

            Tips:必须在定义是初始化,指定其指向。

               指针变量的指向不可改变,但指针变量的指向变量的值可以改变。*p2=12;//合法

               注意(const和*的位置)。const在*后面,请与定义指向常变量的指针变量的形式比较。

       3)、指向常量的常指针(指针变量指向一个固定的对象,该对象的值不能改变)。

         const 基本类型名 *const 指针变量名

    18、void指针类型

    19、引用与指针 

        为什么用引用?

          主要是把它当做函数参数,以扩充函数传递数据的功能。

            (1)将变量名作为实参和形参。值传递是单向的,实参传给形参,形参改变不影响实参的值。

                因为在调用函数时,形参和实参不在同一存储单元。

            (2)使用指针变量做形参,实现两个变量的值互换。 

            (3)以引用作为形参,在虚实结合时建立变量的引用,使形参名作为实参的引用,即形参成为实参的引用。

     using namespace std;
     int main()
     {
     //    const int a=100,b=10;
     void swap(int *p1,int *p2);
    // void swap(int &p1,int &p2);
        int a=10,b=100;
         int *pointer_1,*pointer_2,*p;
         pointer_1=&a;
         pointer_2=&b;
         cout<<a<<" "<<b<<endl;
         swap(pointer_1,pointer_2);
    //     swap(*pointer_1,*pointer_2);
         //*pointer_1=20;
    //     if (a<b)
    //     {
    //         p=pointer_2;
    //         pointer_2=pointer_1;
    //         pointer_1=p;
    //     }
        cout<<a<<" "<<b<<endl;
         cout<<*pointer_1<<" "<<*pointer_2<<endl;
         return 0;
     }
     void swap(int *p1,int *p2)
     // void swap(int &p1,int &p2) 
     {
         int temp;
         temp=*p1;
         *p1=*p2;
         *p2=temp;
    //     
    //     int temp;
    //     temp=p1;
    //     p1=p2;
    //     p2=temp;
      } 
      
    View Code
  • 相关阅读:
    Hashset;HashMap;ArrayList;
    排序方法(冒泡排序,直接选择排序,反转排序);
    父类引用指向子类的对象;
    SQL分支语句与循环语句
    ORCAL 数据库的约束以及SQL语言的四种类型
    Oracle基础数据类型与运算符
    集合
    数组的几种排序
    转换日期格式的工具类
    equals方法重写
  • 原文地址:https://www.cnblogs.com/iloverain/p/5577942.html
Copyright © 2011-2022 走看看