C++基础知识总结--指针

记忆C++的语法很难,光记忆语法也没有用,不如在简单的代码中,体味C++的语法,用实战方式,学习和巩固这些知识。无论有多难的程序,也是由简单的程序组成的,所以,基础知识牢固,才能做出成绩,本着此想法,开始写这篇文章。

一有关指针的基础知识

1.1定义,代码这样实现的:

#include <iostream>
using namespace std;
int main( )
{
       int a,b;                                     //定义整型变量a,b
       int *pointer_1,*pointer_2;   //定义指针变量*pointer_1,*pointer_2
       a=100;b=10;                           //对a,b赋值
       pointer_1=&a;                        //把变量a的地址赋给pointer_1
       pointer_2=&b;                        //把变量a的地址赋给pointer_2
       cout<<a<<" "<<b<<endl;     //输出a和b的值
       cout<<*pointer_1<<" "<<*pointer_2<<endl;  //输出*pointer_1和*pointer_2的值
       return 0;
}

具体一个应用是这样的:输出两个数中,最大与最小值:

#include <iostream>
using namespace std;
int main( )
{
       int *p1,*p2,*p,a,b;
       cin>>a>>b;  //输入两个整数
       p1=&a;  //使p1指向a
       p2=&b;  //使p2指向b
       if(a<b)  //如果a<b就使p1与p2的值交换
       {
          p=p1;p1=p2;p2=p; //将p1的指向与p2的指向交换
       }
       cout<<"a="<<a<<" b="<<b<<endl;
       cout<<"max="<<*p1<<" min="<<*p2<<endl;
       return 0;
}

用指针交换了指向。

1.2用指针做为函数的参数:

函数的参数,直接定义成指针,调用时,直接传入指针

#include  <iostream>
using namespace std;
int main( )
{
   void swap(int *p1,int *p2); //函数声明
   int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量a,b
   cin>>a>>b;
   pointer_1=&a; //使pointer_1指向a
   pointer_2=&b; //使pointer_2指向b
   if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和*pointer_2互换
   cout<<"max="<<a<<" min="<<b<<endl; //a已是大数,b是小数
   return 0;
}

void swap(int *p1,int *p2) //函数的作用是将*p1的值与*p2的值交换
{
   int temp;
   temp=*p1;       
   *p1=*p2;
   *p2=temp;         
}

1.3数组与指针

用于排序方面的例子,其实本质上,数组是用指针来实现的特殊变量。

#include <iostream>
using namespace std;
int main( )
{
    void select_sort(int *p,int n); //函数声明
    int a[10],i;
    cout<<"enter the originl array:"<<endl;
    for(i=0;i<10;i++) //输入10个数
        cin>>a[i];
    cout<<endl;
    select_sort(a,10); //函数调用,数组名作实参
    cout<<"the sorted array:"<<endl;
    for(i=0;i<10;i++) //输出10个已排好序的数
        cout<<a[i]<<"  ";
    cout<<endl;
    return 0;
}

void select_sort(int *p,int n) //用指针变量作形参
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(*(p+j)<*(p+k)) k=j; //用指针法访问数组元素
        t=*(p+k);
        *(p+k)=*(p+i);
        *(p+i)=t;
    }
}

1.4字符指针字符串

#include <iostream>
using namespace std;
int main( )
{
    char *str="I love CHINA!";
    cout<<str<<endl;
    return 0;
}

1.5函数指针

#include <iostream>
using namespace std;
int main( )
{
    int max(int x,int  y);  //函数声明
    int (*p)(int,int);  //定义指向函数的指针变量p
    int a,b,m;
    p=max;  //使p指向函数max
    cin>>a>>b;
    m=p(a,b); //指向了以后要这么用
    //-------------------------------------------
    cout<<"max="<<m<<endl;
    return 0;
}

int max(int x,int y)
{
    int z;
    if(x>y) z=x;
    else z=y;
    return(z);
}

可以很方便地实现用不同的情况下,调用不同的函数方法来处理,动态绑定。

1.6 C ++ 引用

#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
   int a=10;
   int &b=a;  //声明b是a的引用
   a=a*a;  //a的值变化了,b的值也应一起变化
   cout<<a<<setw(6)<<b<<endl;
   b=b/5;  //b的值变化了,a的值也应一起变化
   cout<<b<<setw(6)<<a<<endl;
   return 0;
}

引用,通俗的说,就是给变量取了其它的名字,相当于我们中国人有大名和小名一样,这样做的好处就是,函数值传递时,参数传递,只是传了个地址,直接在原地进行处理,省去了新开辟一个空间的代价,效率提高。

总结:

  1. 如果看到形参是指针的函数方法,一定传递进去一个地址,用指针或用取变量地址符&,传递进去,就可以正确地调用这个函数。
  2. 如果是看到形参是引用的函数方法,就直接传递变量,来调用这个函数方法。
  3. #include <iostream>
    using namespace std;
    int main( )
    {
       void swap(int &,int &);
       int i=3,j=5;
       swap(i,j);
       cout<<"i="<<i<<"  "<<"j="<<j<<endl;
       return 0;
    }
    
    void swap(int &a,int &b)  //形参是引用类型
    {
       int temp;
       temp=a;
       a=b;
       b=temp;
    }

上面这个例子,函数的形参是整数型的引用,调用它时,直接给整数型的变量,就可以正确使用它。

时间: 2024-10-07 19:53:08

C++基础知识总结--指针的相关文章

C语言基础知识【指针】

2017年7月11日18:33:41C指针  该看地址:http://www.runoob.com/cprogramming/c-pointers.html1.学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的.正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址.请看下面的实例,它将

二级指针基础知识

/* ============================================================================ Name : TestDoublePointer.c Author : lf Version : Copyright : Your copyright notice Description : 二级指针基础知识 ================================================================

c++基础知识篇:指针

从面试的反馈来看,这部分可以问的很难. 1.指针与引用的区别 指针是一个变量,用来存放地址的变量.引用是原来变量的存储空间的别名. ? 2.指针作为参数的要点 a.需要进行指针的合法性检验,防止空指针. b.需要修改指针本身指向的地址时,参数需要是该指针的引用. ? 3.c++程序运行空间 数据区(Data Area):全局变量.静态变量.常量存放在数据区. 代码区(Code Area):所有类成员函数和非成员函数 栈区(Stack Area):为运行函数分配的局部变量.函数参数.返回数据.返回

C语言基础知识----指针数组 &amp;&amp; 数组指针 &amp;&amp; 函数指针 &amp;&amp;指针函数

指针数组 && 数组指针 char (*ptr)[5]; //定义一个指向数组指针ptr,指向包含5个char类型的数组 char *a[5]; //定义一个指针数组a,包含5个char*类型指针 #include <stdio.h> int main(void) {     char *a[5]={"red","white","blue","dark","green"};   

指针学习系列一 基础知识

本系列文记录我对指针的理解,从新手入门级写起,文字代码全手写,大神们发现错误请给我留言,谢谢!欢迎进一步讨论可以联系邮件[email protected] -1- 基础知识 → 1指针是一种变量类型,int*和int一样,指针指向变量a是指指针的内容是变量a的地址. 例1 对比普通数据类型 int a=1; //内存腾出一块4k的空间,首地址给a(设120),a=1则将1填进这块内存 int* b=&a; //内存腾出一块空间,依据指针所占内存和机子有关,首地址给b(设250),b=&a则

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

TCP/IP基础知识

最近工作中需要自己在板卡植入TCP/IP协议栈,因为毕竟单片机性能有限,完整的TCP/IP协议栈很庞大,所以只能移植经过简化的,本来已成功将LWIP协议栈移植到项目板卡中,但老大说这个协议栈写得过于繁琐,特别是在内存管理这块,不容易理解,而且我们板卡对数据的准确性要求没那么高,重点要保证能通就行,偶尔丢失一两个包都没关系,所以按此需求自写协议栈,实现UDP以及Telnet通信,目前UDP已经实现,其余功能还在慢慢增加中,通过这段时间的研究发现实现UDP并不难,最主要是要把网络通信的一些基本概念知

OC语言基础知识

OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的

服务器架设笔记——Apache模块开发基础知识

通过上节的例子,我们发现Apache插件开发的一个门槛便是学习它自成体系的一套API.虽然Apache的官网上有对这些API的详细介绍,但是空拿着一些零散的说明书,是很难快速建立起一套可以运行的系统.(转载请指明出于breaksoftware的csdn博客) 为了实现最基础的URL解析等功能,我把<Apache模块开发指南>一书粗略了翻看了两遍,以利于迅速了解Apache模块编程的相关知识.至于书中具体的知识点,我并不在此赘述.但是为了便于大家了解之后遇到的各种相关的知识点,我大致罗列几条(摘