【C++】指针和new相关
看黄邦勇帅的笔记。
指针和new之前觉得已经掌握的很好了,可是看了资料还是get到了新知识。记录一下。
1.指针只支持 4 种算术运算符:++,――,+,-.指针只能与整数加减.指针运算的原则是:每当指针的值增加时,它将指向其基本类型的下一个元素的存储单元.减少时则指向上一个元素的存储单元.
2.注意两个指针不能相加. 例 int *p; p=&x; 假设 x 的地址为 200, 则 p+9 将的指针地址将是 200+4*9=236,即 p 指向了从当前正指向的元素向下的第 9 个元素.
3.两指针相减,同类型的一个指针减去另一个指针的值将是两个指针分开的基本类型的元素的个数.
4.const int x=1; int *p=&x;这样做将发生错误,因为如果把 x 的地址给了 p,而指针 p 又修改了 x 的值时,这时 x 就违反了是常量的 规定,所以不允许这样做。
5. int a[10]; 则 a 等于 &a[0]
int b[3][4]; 则b 等于 &b[0], b[0] 等于 &b[0][0] 即数组名是首元素的地址。
6. 多维数组怪现象: int b[3][4]; 则 *b 等于 b,因为 *b = *(&b[0]) = b[0] = &b[0][0] = b
7.多维数组计算的技巧:
A.对于像 b[1]这样的地址,最好应表示为&b[1][0]再进行偏移计算;
B.对于有小括号的地方,一定不要省略小括号。比如(&b[1])[1]与&b[1][1]将表示的是不同的结果,第二个是显然的,对于第一个(&b[1])[1]=*((&b[1])+1)=*(&b[1]+1)=*(&b[2])=b[2]
例:*(b+1)[1]:*(b+1)[1]=**((b+1)+1)=**(b+2)=*(*(b+2))=*b[2]=b[2][0] (因为[ ]运算符高于指针)
8.对于多维数组 a[n][m][i][j],那么这些地址是相同的,即数组名a, a[0],a[0][0], a[0][0][0], &a[0][0][0][0],都是相同的地址。要得到第一个元素的值,应该****a,也就是对 4 维数组需要求 4 次指针运算。同样可以看到,对数组名进行的前三次指针运算的值都是相同的,即*a, **a, ***a 和 a 的值都是&a[0][0][0][0]的值。
9.当把 int y[4]赋给指针 int(*p)[4] 时 p=y 将是错误的,正确的方式为 p=&y 因为这时编译器会检查赋给指针 p 的元素是否是含有四个元素的数组,如果是就能 正确的赋值.但语句 p=y 中的 y 代表的是数组 y[4]第一行第一列的元素的地址也就是&y[0]的地址,因此 y 指向的地址只有一个元素,而指针 p 要求的是有 4 个元素的数组的地址,因此语句p=y 将出错。
10.int (*p)[4]与语句 int x[][4]等价。
11.动态创建数组:
一维:int *p=new int [11];
二维:int (*p)[102]=new int [4][102] (删除 delete [] p;)
12. 动态创建对象的初始化:int *p=new int(102)该语句表明 由p 指向的新创建你对象被初始化为102。
13. 而对于内置类型或没有默认构造函数的类型,则采用不同的初始化方式就会有显著不同的差别。例如:int *p=new int; int *p=new int();第一条语句没
有被初始化,而第二条被初始化为0。
14.用 new 动态创建的数组不能被初始化
15.不能在空闲存储区上创建内置类型元素(除类数组 string 外)的 const 数组。因为我们不能初始化用 new 创建的内置类型数组的元素。
【C++】指针和new相关的更多相关文章
- 指向函数的指针与iOS-Block相关知识
指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...
- C 语言中的指针和内存泄漏
引言对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧 ...
- C语言中的指针和内存泄漏
引言 对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
- 由strcat函数引发的C语言中数组和指针问题的思考
问题一 首先,来看一下下面这段代码: #include <stdio.h> #include <string.h> int main() { char *str = " ...
- [C]C语言中的指针和内存泄漏几种情况
引言 原文地址:http://www.cnblogs.com/archimedes/p/c-point-memory-leak.html,转载请注明源地址. 对于任何使用C语言的人,如果问他们C语言的 ...
- C语言中的指针和内存泄漏几种情况
引言 原文地址:http://www.cnblogs.com/archimedes/p/c-point-memory-leak.html,转载请注明源地址. 对于任何使用C语言的人,如果问他们C语言的 ...
- C 的指针和内存泄漏
引言 对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏 ...
- 对比 C++ 和 Python,谈谈指针与引用
花下猫语:本文是学习群内 樱雨楼 小姐姐的投稿.之前已发布过她的一篇作品<当谈论迭代器时,我谈些什么?>,大受好评.本文依然是对比 C++ 与 Python,来探讨编程语言中极其重要的概念 ...
- [CPP] 智能指针
介绍 C++ 的智能指针 (Smart Pointers) 相关 API. C++ 中的智能指针是为了解决内存泄漏.重复释放等问题而提出的,它基于 RAII (Resource Acquisition ...
随机推荐
- nodeJs 调试异步程序追踪异步报错
DeprecationWarning: Calling an asynchronous function without callback is deprecated. 翻译: 不建议在不回调的情况下 ...
- 测试理论-selenium的工作原理
- MySQL初识2
用python调用mysql的一些方法总结: 1.编码声明: # encoding: UTF-8#!/usr/bin/python 在开头处进行声明,避免出现输入中文时,提示声明错误(当然输入中文出现 ...
- Hadoop世界中的HelloWorld之WordCount具体分析
MapReduce 应用举例:单词计数 WorldCount可以说是MapReduce中的helloworld了,下面来看看hadoop中的例子worldcount对其进行的处理过程,也能对mapre ...
- systemtap get var of the tracepoing
kernel.trace("sched_switch") func:func:perf_trace_sched_stat_template get the function in ...
- JavaScript中常用转义字符
\b 退格 \f 换页 \r 回车 \n 换行 \" 双引号 \' 单引号 \t Tab字符 \\ 反斜杠 \xnn 十六进制代码nn表示的字符 \unnnn 十 ...
- Beats数据采集
Beats数据采集 Beats是elastic公司的一款轻量级数据采集产品,它包含了几个子产品: packetbeat(用于监控网络流量). filebeat(用于监听日志数据,可以替代logstas ...
- 【bzoj4750】密码安全 单调栈
题目描述 模10^9+61 输入 第一行包含一个正整数 T ,表示有 T 组测试数据. 接下来依次给出每组测试数据.对于每组测试数据: 第一行包含一个正整数 n . 第二行包含 n 个非负整数,表示 ...
- P3539 [POI2012]ROZ-Fibonacci Representation
题目描述 The Fibonacci sequence is a sequence of integers, called Fibonacci numbers, defined as follows: ...
- SNMP OID Reference - NetScaler 10
SNMP OID Reference - NetScaler 10 https://docs.citrix.com/content/dam/docs/en-us/netscaler/10/downlo ...