c++指针 笔记

我们定义一个指针就一定要用他保存一个内存地址,加入我们不这样做,
那么该指针就是一个失控指针他可以指向任何地址,并且对该地址的数值进行修改或删除,后果是非常可怕的
解决办法是将该指针初始化为0,即p = 0;该语句是将p所保存的地址清零,
(即让p指向00000000这个地址,这个地址是不会存放任何数据的,因此我们对它进行的任意操作都不会产生严重后果)
这样p就不会因为我们的疏忽而修改它指向的地址(随机)的值

由于指针类型不同决定了指针的运算方式不同,所以我们不能将一种类型的指针赋给另一种类型的指针

可以用如下代码验证,计算地址变化前后的差值就会发现,不同类型的指针数据,自加之后的值和原来的值得差是不一样的

因此我们也不能将一种类型的指针的值赋给另一种类型的指针,否则会报错

#include <iostream>
using namespace std;
int main()
{
    double a = 3.14;
    int b = 6;
    double *p = &a;
    int *q = &b;
    cout << "p:" << p << endl;
    cout << "q:" << q << endl;
    p++;
    q++;
    cout << "p:" << p << endl;
    cout << "q:" << q << endl;
    return 0;
}
时间: 2024-08-10 02:10:33

c++指针 笔记的相关文章

C和指针笔记 3.6链接属性

链接属性决定如何处理在不同文件中出现的标识符.标识符的作用域也它的链接属性有关,但这两个属性并不相同. 没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体. internal链接属性的标识符在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体.最后,属于external链接属性的标识符不管声明多少次.位于几个源文件都表示同一个实体. 图3.2的程序骨架通过展示名字声明的所有不同方式,描述了链接属性.在缺省情况下,

C和指针笔记 3.7 存储类型

变量的破碎类型是指存储变量值的内存类型.变量的存储类型决定变量何时创建.何时销毁以及它的值将保持多久. 有三个地方可以用于存在变量:普通内存.运行时堆栈.硬件寄存器. 变量的缺省存储类型取决于它的声明位置.凡是在任何代码块之外声明的变量问题存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量.对于这类变量,你无法为它们指定其他存储类型.静态变量在程序运行之前创建,在程序的整个执行期间始终存在.它始终保持原先的值,除非给它赋一个不同的值或者程序结束. 在代码块内部声明的变量的缺省存储类型

C和指针笔记 3.8 static关键字

当用于不同的上下文环境时,static关键字具有不同的意思. 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响.用这种方式声明的函数或变量只能在声明它们的源文件中访问. 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响.用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一起存在,而不

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

C指针笔记

重新学习C语言,整理一篇关于C语言指针的文章是很有必要的. 首先是指针的理解:指针是一个变量,存放内存地址的一个变量. 先由一段代码引出: #include <stdio.h> #include <stdlib.h> int main() {     int year = 2017;     int * prt_year = NULL;     prt_year = &year;     printf("今年是%d年",*prt_year);     r

20160921晚 指针笔记

1 为什么要用指针   因为C要操作内存. 2 指针也是要占用内存的. 3  指针的表示:首地址  +  长度   int*   char* 4   哪些方面会用到指针呢?以下方面会用到指针: 4.1函数传参:指针占用内存空间是一定的,参数有大有小,大的参数用指针,就能节约内存空间,程序运行快. 4.2跨函数的值修改 4.3数组是一个特别的指针:const int *pArray;常量指针 4.4数据的一些结构:链表,二叉,等. 5 平常开发中,只用到2级指针.3级就等着被开除. 6 void*

c++指针笔记一

左值和右值的区别:左值就是在赋值中可以放在赋值操作符两边的值,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const量是例外. 而右值则是只可以放在赋值操作符右边的值,比如: int a = 0; char *b = "hello"; 3 = a; // ERROR "howdy" = b // ERROR 这里3和"howdy"都是右值,所以不能放在赋值操作符左

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

指针-笔记

什么是指针? 指针是一类数据类型的统称. 这种类型的数据用来专门存储内存中的一块空间的编号,用于表示这一段内存.以实现通过内存地址(编号)完成各种运算.也就是一个指针指向一块内存空间,指针把这一块空间的第一个Byte的空间的地址存在指针的右值中.指针自己也是有内存空间和内存地址的. 数祖名也是个指针,而且是个常量指针. 该指针指向数组在内存中的那块空间,并把数组第一个字节的地址存在指针的右值中.该地址和数组第一个元素的首地址相同. 指针的类型有很多,其他在下面体现,这里就不一一举例了. 常见的两