C++ 指针复习

最近开始准备实习的笔试,复习了一下C++ 指针的内容

在计算机的每一个字节都有一个对应的地址:

很多书上用街道上的门牌比喻:地址使用数字来表示的,就和街道上的门牌号一样。但这样是不甚贴切的,因为存在着二级指针和一个数据存在多个地址等情况。

所以我觉得用字典前面的目录来比喻比较贴切。

在我们的程序中:

先举一个简单的例子,int *p ; 这里表明我们定义了一个指针,也就是说我们在字典的目录里定义了一条目录,但是它指向的内容(值),指向多少页(存放的地址)都是不确定的。

int *pc ;//定义了一个指针
int   ac;
pc = &c ;//这个时候,指针就指向了a
c= 5;//p指向的a 就存了值 5;

cout << pc <<endl;//0034FE88
cout << &c <<endl;//0034FE88
cout << c <<endl;  //5
cout << *pc <<endl;//5
cout << pc + 1 <<endl;//0034FE8C*pc = 3;cout << c <<endl;//3int *pd;*pd = 4;//error

可以看到,这时,pc存放着数据c的地址,而*pc代表着c中存放的值,改变了*pc也就意味着改变了变量c的值,值得注意的是,pc+1的值并不是代表着pc地址值+1,而是pc地址值+1*int数据所占字节的值。

但是如果一个指针,不进行初始化的话,是不能够进行赋值的,Run-Time Check Failure #3 - The variable ‘pd‘ is being used without being initialized.

#include <iostream>
using namespace std;

int main()
{
int a[]={30,21,12,43,34,75};
char b;
int *p = a;
for(int i = 0 ; i<5 ; i++)
cout << *(p++) <<endl;//3,30,21,12,43
int *q = a;
cout << q <<endl;//0030F978
cout << q+1 <<endl;//0030F97C
cout << *q <<endl;//30
cout << *q+1 <<endl;//31
cout << *(q+1) <<endl;//21
cout << &a[1] <<endl;//0030F97C
cout << &q <<endl;//0030F930
cin>>b;
return 0 ;
}

可以看出,实际上q就存放着数组a的首地址,而q+1就是a[1]元素的地址,*(q+1)就是a[1].

时间: 2024-08-01 17:46:10

C++ 指针复习的相关文章

黑马程序员_IOS开发_Objective-C学习笔记_指针复习

1.指针 上一篇我在分析我自己写的程序错误里面发现是指针的问题,我觉得有必要在复习一下指针,毕竟指针是C语言系列的难点. 指针是C语言的精髓,但是很多初学者往往对于指针的概念并不深刻,以至于学完之后随着时间的推移对指针的概念和使用越加模糊,感觉指针难以掌握,今天我就再回顾下指针的概念和使用. 2.什么是指针 指针的本质是存放变量地址的变量,简单的说变量p中存储的是变量a的地址,那么p就可以称为是变量a的指针,或者说p指向a.当我们访问a变量的时候其实是程序先根据a取得a对应的地址,再到这个地址对

指针复习-交换二个数

# include<stdio.h> //重点理解:1.指针:变量的地址.指针变量:存放地址的变量. void exchange_1(int a,int b)//只能在此函数实现变量交换,交换后的值不能返回到main函数中 { int t; t = a; a = b; b = t; } void exchange_2(int* a,int* b)//此函数只是交换了存放a,b地址的变量中的值. { int * t;//a,b表示a,b变量的地址 t = a; a = b; b = t; } v

指针复习

/* ============================================================================ Name : Hello.c Author : Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ===========================================================

C语言指针复习

本文来自https://blog.csdn.net/ccchenxi/article/details/83271212 第8章 指针8.1 指针变量1.指针变量定义及赋值:int a;  int *p=&a; 或 int a;  int *p;  p=&a;2.指针运算符:(1)取地址运算符& (2)取内容运算符* (结合性均为右至左)3.指针加1,不是纯加1,而是加一个所指变量的字节个数4.指针变量作为函数参数,例,交换函数swap():#include<stdio.h&g

数据结构复习之C语言指针与结构体

数据结构指针复习: #include <stdio.h> void main() { int a[5] = {8, 2, 3, 4, 5}; // a[3] == *(3+a) printf("%d\n", *(3+a)); // a[3] 4 printf("*a其实就是a[0]: %d\n", *a); // 8 // 地址是连续的 printf("%p\n", a+1); printf("%p\n", a+2

C++ 语法--唯一的难点const和复合类型

总结在底下. 1.const和引用 可以把引用绑定在常量上,称之为,对常量的引用.不能对那个引用赋值. 如: const int ci = 1024; const int &ri = ci; 解读:ri是对ci的引用.ri的const意思是视ci为变量. 对于常量,只能使用“对常量的引用”这个引用方式 int &ri = ci;是错误的,因为ci不能赋值,但是可能会对ri赋值从而影响const限定. 所以,他们(制定标准的人)创造了 对常量的引用 的 引用方式. 下面高能!!! 上面说:

传智播客C语言视频第二季(增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

?? 卷 backup 的文件夹 PATH 列表卷序列号为 000000F4 D4A8:14B0J:.│  1.txt│  2.txt│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│  ├─文档│  │      第1讲 C语言第一阶段.doc│  │      │  └─视频│          第1讲 C语言第一阶段.mp4│          ├─2传智播客_尹成_C语言从菜鸟到高手_第二章C语言跨平台HelloWorld-A│  ├─第10节 2.5.1-2.5.7C

C++ Boost 2 容器

C++ Boost 2 容器 在线文档:http://www.boost.org/doc/ 离线文档:解压Boost压缩包,浏览boost_1_62_0/boost_1_62_0/libs/libraries.htm#Containers 目录: Boost any 容器 引用与指针复习,引用并不会退化 boost.tuple,类似STL的pair键值对,但是tuple可以装10种不同的任意数据类型 tuple的创建,值操作要注意的 tuple.tie:创建一个所有元素类型为非const引用的t

结构体语法梳理2-指针与一维数组

结构体指针与结构体数组 1.1 指针复习 对于指针的理解,我们一方面从语法层面上理解,一方面编译器角度理解会发生什么事情. type  *p = value; p+i   的结果是 value+sizeof(type)*i 对于指针变量p ,*前面的type决定了 如何通过p存储的地址去访问内存. 比如 int  *p1 = 0x10; char *p2 = 0x10; double  *p3 = 0x10; *p1 从 0x10地址处访问四个字节,并且把这四个字节的数据当int类型来看. *p