C++复习15.指针知识

4.指针知识
     在Tencent 笔试和面试中都考到了 C/C++中的指针知识,因为自己很不喜欢使用指针,所以才开始学习 Java的,但是现在看来还是躲不掉的,所以这里总结一下指针的知识。
     指针涉及到了数组的问题,一个很容易混淆的知识就是“指针数组”和“数组指针”。
     指针数组,顾名思义,他本身就是一个数组,什么的数组呢?存放的是指针的数组。相对的数据指针,落脚点在指针上,它是一个指向数组的指针。举个例子说明一下:
    int * p[2]; 声明了一个数组,数组的类型是 int类型的指针,也就是说这个数组里面存放的是 int型的指针。表示为 int* p[]是一个更好地理解方式。
     相对应的 int (*p)[2];则是数组的指针,定义了一个指针,指向一个数组。
     因为[] 运算的优先级要高于 *,所以我们需在声明数组指针的时候,使用 ().
     数组指针,也成为行指针, int (*p) [n], p是一个指针,指向一个整形的一维数组,而且这个一维数组的长度是 n,其中 n就是 p的步长,也就是说当 p执行 p+1的时候, p要跨越 n个整形数据的长度。那么,这种数组指针,每一个指针指向的是一个数组,当执行 +1操作之后,指向的是另一个数组,所以一般在多数组中使用。
    int a[3][4]; int (*p)[4]; 声明一个数组指针,指向含有 4个数据的数组;
    p=a; 将二位数组的首地址赋给 p,也就是 &a[0];
     执行完p++;则 p指向的是 a[1] ,所以数组指针也称指向一维数组的指针,亦称行指针。
    个 int 类型的数组,我们看一下他的大小。
    cout<< 位机上是 4Byte
    cout<<  如果是改成 int (*pb)[5];则 sizeof(*pb) =20 = 4*5,他是该数组的大小。
    int arr[3][4]; 其中sizeof(arr) = 48 , 是整个数组的大小。
    cout << "arr size: " << sizeof(arr) << endl; //48
    cout << "arr[0] size :" << sizeof (arr[0] )<< endl; //16
    cout << "arr is " << arr << endl; // 是数组的首地址
    cout << "*arr is " << *arr << endl;// 也是数组的首地址,两者相等
    cout << 
    cout << 
    cout << 
     对于一维数组:
    int arra[5] = {1,2,3,4,5};
    for(int i=0;i<5; i++){
        cout << *(arra+i) << " " ;
        
    } 输出真个数组,我们不可以对 arr进行修改,但是可以利用加减法取数据
     对于二维数组:
    cout << "使用 arr 运算输出整个数组"  << endl;
    for(int i=0;i<3;i++){
         for( int j=0;j<4;j++){
            cout << *(*(arr+i)+j)<< " "; arr + i是改变的行, ( *arr + j) 是列
        }
        cout << endl;
    }
    pb= arr ; 在这里arr是数组的首地址,也就是将二位数组的首地址赋给 p,也就是 arr[0] 或者&arr[0][0]
    cout << "   pb is " <<  pb << endl; // 数组的首地址
    cout << " *pb is " << *pb << endl; // 也是数组的首地址
    cout << "**pb is " << **pb<<endl; //是数组第一个元素
    cout << "size of pb " << sizeof (pb) << endl;// 4  指针的大小
    cout << 个整数的数组,数组的大小是 16, 所以对 pb++ 相当与指向下一行
    cout << "size of **pb " << sizeof (**pb) << endl; //数组中的值
 
       cout << "使用 pb指针输出数据" << endl;
    for(int i=0;i<3;i++){
         for( int j=0;j<4;j++){
            cout << *(*pb+j) << " ";
        }
        cout << endl;
        pb++; // 每加一次,指向的是下一行,指针 pb不可以随便操作,他指向的是是个 int [4] 的指针数组,
    }
 

C/C++ 复习知识 2013.09.13

C/C++ 复习知识 2013.09.13

前言:
    今天是参加西山居笔试,都是C/C++的东西,感觉笔试题还是很坑的,但是反映了自己的基础很差,所以先整理一下自己不会的C++知识.同时今天把实习的工作暂先辞去了,因为要准备找工作,所以未来的话,还是不去了,但是那边的实习交接还真是个麻烦的事情,希望Tibo那边尽量早点找到人来接受这一块的。
     在没节操一下:从公司回来的时候,老爸给我打电话,说“什么时候带个媳妇儿回来啊?人家谁谁带家一个媳妇儿回来”。是啊,也不知道为什么自己一直单身啊?之前三年的时间里,或许是因为心里一直装着一个人,也是因为自己明白自己想要的是什么,大学期间没有时间,但是今年过了21周岁的时候,心里渐渐地腾出了地方,自己也渐渐变得更加理性了。另外爱情是可遇而不可求的,所以只要我自己把状态调整好,做好准备,自然会遇到那个唯一的她,期待爱情中。话说今天还真是遇见好多漂亮的妹子,公交车上遇见一个特清纯的,宣讲会的时候也遇到好几个,算了,不YY了。复习C++了。
 
1.C C++ char []  
     char a[6] = "sd\0fg";
      cout << "strlen(a):" << strlen(a) << endl; 
      cout << "sizeof(a):" << sizeof (a) << endl;
     strlen 是一个函数,是在运行期间决定的,他遇到第一个\0结束计算其大小,返回的是字节数.
     我们使用字符指针的时候,声明一个字符串,默认会在后面加上一个\0, 使用sizeof的时候,会计算进去。
     char a[6] = "asdf"; strlen(a) = 4; 但是 strlen(a) = 6, sizeof 是计算内存的大小,这个是在编译期间决定的,初始化的时候a声明的是6个字节的大小。
  对于上面那种字符串char a[] = "as\0df"; sizeof (a) = 6, 后面还是会加上一个\0. 但是使用strlen计算长度的时候,就会遇到第一个\0为止,所以返回的是2。
  C C++  char * a ;
        char * b = "yangteng";
cout << "sizeof(b) :" << sizeof(b) << endl; //4
cout << "strlen(b) :" << strlen(b) << endl; // 8
cout << "sizeof(*b) : " << sizeof(*b) << endl; // 1 就是一个字符 
     这里的a 是一个指针,指向的是一个字符,类型是一个字符指针,所以sizeof(b) = 4 表示的是指针的大小;
 
 
 
char *str[]={"11111","22222","33333","44444","66"};
     char **    p=  str +  1;
     str[0]=(*  p++)  +2;
     str[1]=*(p+1);
     str[2]=p[1]+3;
     str[3]=p[0]+3;
     cout<<str[0]<<endl;
     cout<<str[1]<<endl;
     cout<<str[2]<<endl;
     cout<<str[3]<<endl;

C++复习15.指针知识的更多相关文章

  1. C语言复习:指针知识

    指针知识体系搭建 指针强化 指针是一种数据类型 指针也是一种变量,占有内存空间,用来保存内存地址 测试指针变量占有内存空间大小:sizeof(指针名); 2)*p操作内存 在指针声明时,*号表示所声明 ...

  2. C语言复习: 二级指针和多级指针

    二级指针内存模型建立 void main2() {     int i = 0;       //指针数组     char * p1[] = { "123", "456 ...

  3. c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html 1.利用指针交换两个字符串方法?(这题是我当年读大一的时候看到的,好怀 ...

  4. Java复习1.基本知识

    Java语言概述 20131003 开头语: 开发领域,重要的编程语言基本都是C/C++,然后就是Java, C/C++就不用说了,另外掌握Java对你是有很大的帮助的,而且也会扩宽你的择业范围.同时 ...

  5. [JS复习] JS 基础知识

    项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display  :inline or bloc ...

  6. C/C++指针知识整理(一)

    1.指针(变量)的类型 把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型.这是指针本身所具有的类型. (1)int*ptr; //指针的类型是 int* (2) char*ptr;//指针 ...

  7. C++复习5.指针数组字符串

    C/C++ 指针.数组和字符串 本次学习指针.数组.字符串.引用的内存映像. 1.指针 指针的本质:可以执行的程序是由指令.数据和地址组成的.当CPU访问内存单元的时候,不论是读取还是写入,首先要把内 ...

  8. 指针知识梳理6-const与指针

    const 定义的变量为仅仅读变量.在语法层面上通过这个变量去改动内存是不同意的. 可是对于下面代码.就有非常多人绕了: const int  *p1;  //p1能变.*p1不能变 int cons ...

  9. IOS 杂笔-15(知识小点 readonly)

    readonly是我们并不陌生的属性. 但是他也有值得我们注意的地. 属性如其名-只读-也就是说我们只能读取-不能进行写操作 当我们尝试进行写操作时会如下 但是这并不意味着我们不可以改变其内部的属性 ...

随机推荐

  1. 中线,基线,垂直居中vertical-align:middle的一些理解

    基线:小写字母xxxxx的下边缘线就是我们的css基线:一般的行内元素都是vertical-align: baseline;默认设置: x-height:就是指小写字母xxxx的高度,下边缘线到上边缘 ...

  2. spark 作业提交

    kafka-topics.sh --describe --zookeeper xxxxx:2181 --topic testkafka-run-class.sh kafka.tools.GetOffs ...

  3. TortoiseSVN_1.9.1.267_x64版本控制系统(针对Visual SVN Server)使用简单介绍

    软件下载地址:TortoiseSVN(SVN客户端)64位 V1.9.1.267简体中文免费版 软件详细操作说明:TortoiseSVN使用说明书(超详细) 文章内容:此篇是简单记录如何从Visual ...

  4. Spring Tomcat启动过程

    入口,配置再web.xml中, 初始化applicationContext 创建webApplicationContext,这里可加载web.xml文件中定义了contextClass 获取conte ...

  5. 《JAVA程序设计》第五次实验报告

    20145333 实验五 Java网络编程及安全 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:3 ...

  6. 20144303 《Java程序设计》第六周学习总结

    20144303 <Java程序设计>第六周学习总结 教材学习内容总结 第十章输入和输出 Java是以串流(Stream)的方式来处理输入与输出. 串流是一种抽象观念,从键盘输入资料,将处 ...

  7. ARTS Week 001

    Algorithm Leetcode 1. Two Sum Given an array of integers, return indices of the two numbers such tha ...

  8. char,short,int长度

    数据类型的本质就是固定内存大小的别名 char:1byte short:  2byte int:4byte 其实变量也是对连续内存的别名,相当于这段内存的句柄.钩子

  9. input[type="file"]的样式以及文件名的显示

    如何美化input[type="file"] 基本思路是: (1)首先在 input 外层套一个 div : (2)将 div 和 input 设置为一样大小(width和heig ...

  10. 解题报告:poj2689 Prime Distance

    2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...