首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C和指针小结(C/C++程序设计)

C和指针小结(C/C++程序设计)

作者头像
互联网金融打杂
发布2018-04-03 10:26:36
5680
发布2018-04-03 10:26:36
举报

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  }

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!='\0';p1++,p2++)
11     *p2=*p1;
12     *p2='\0';
13     p1=str1;
14     p2=str2;
15     cout<<"str1 is "<<p1<<endl;
16     cout<<"str2 is "<<p2<<endl;
17     return 0; 
18   } 

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   }

 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;
  } 
  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-06-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档