zoukankan      html  css  js  c++  java
  • C++指针

    1.*pa[]与(*pa)[]区别:

        *pa[3]:  运算符[]优先级高于*,所以*pa[3]表明pa是包含3个指针的数组;

        (*pa)[3]: pa是一个指针,它指向一个包含3个元素的数组。

    2.“const int *a” 与“int* const a”的区别:

          (1)const int *a = &b:不允许通过a来修改b的值,但是a可以指向其他值;

                (int const *a = &b与上面的情况一样,可以指向其他值,但不能通过a来修改b的值)

           (2)int* const a = &b:运行通过a来修改b的值,但是a不可以指向其他值。

    int b =10;
    const int* a;//不一定需要初始化
    int* const a;//错误 没有初始化
    int* const a = &b;//正确 必须初始化
    a = &b;
    

      

          总结:如果const位于*的左边,则const就用来修饰指针所指向的变量,即指针指向为常量,与1一样; 

                  如果const位于*的右边,则const修饰指针本身,即指针本身是常量,与2一样。

       eg:

    void main()
    {
    	int b =10;
    	int c = 5;
    	const int *a = &b;//a可以指向其他值,但是不能通过a来修改b的值
    	a = &c;//a指向c的值
    	int* const a2 = &c;//a2不可以指向其他值,但是可以通过a来修改c的值
    	(*a2)++;//通过a2来修改c的值
    	cout <<"a="<<*a<<endl;
    	cout <<"a2="<<*a2<<endl;
    	//结果a=6,a2=6
    }
    

    3.创建二维动态数组:

       ar[m][n] == *(*(ar+m)+n),而*(ar+m)+n表示a[m][n]的地址

    void main()
    {
    	int n = 5;
    	//创建二维动态数组
    	int **a = new int*[n];
    	for(int i=0;i<n;i++)
    		a[i] = new int[n];
    
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			a[i][j] = i+j;
    		}
    	}
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	//注意释放内存
    	for(int i=0;i<n;i++)
    		delete[]a[i];
    	delete[]a;
    }
    

    4.函数指针:

       double  (*pf)(int): pf是输入int类型返回double类型的指向函数的指针;

       double *pf(int):    pf是输入int类型返回double类型指针的函数:

  • 相关阅读:
    hadoop 2.5.1 、Hadoop 2.7 Hadoop 2.6
    二 JDK + mysql + yum + rpm
    一 SSH 无密码登陆 & Linux防火墙 & SELinux关闭
    ZooKeeper 配置注意事项 zoo.cfg
    ZooKeeper 特性
    分布式锁
    悲观锁和乐观锁
    windows上配置mysql主从复制
    C# 同步调用、异步调用、异步回调
    C#方法回调
  • 原文地址:https://www.cnblogs.com/jx-yangbo/p/4860240.html
Copyright © 2011-2022 走看看