指针

(4)指针数组

#include <iostream>

using namespace std;
const int MAX = ; int main ()
{
int var[MAX] = {, , }; for (int i = ; i < MAX; i++)
{
cout << "Value of var[" << i << "] = ";
cout << var[i] << endl;
}
return ;
}
Value of var[] =
Value of var[] =
Value of var[] =

指向整数的指针数组的声明:

int *ptr[MAX];

把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针

#include <iostream>

using namespace std;
const int MAX = ; int main ()
{
int var[MAX] = {, , };
int *ptr[MAX]; for (int i = ; i < MAX; i++)
{
ptr[i] = &var[i]; // 赋值为整数的地址
}
for (int i = ; i < MAX; i++)
{
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] << endl;
}
return ;
}
Value of var[] =
Value of var[] =
Value of var[] =

也可以用一个指向字符的指针数组来存储一个字符串列表:

#include <iostream>

using namespace std;
const int MAX = ; int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
}; for (int i = ; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << names[i] << endl;
}
return ;
}
Value of names[] = Zara Ali
Value of names[] = Hina Ali
Value of names[] = Nuha Ali
Value of names[] = Sara Ali

char *names[MAX] 是指针数组, 它的本质是存储指针的数组, 既存储 char 类型的指针的数组, 数组内的每个元素都是一个指针指向一个存储 char 类型的地址:

#include <iostream>
using namespace std; const int MAX = ; int main(int argc, const char * argv[]) { const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
}; for (int i = ; i < MAX; i++) {
cout << " --- names[i] = " << names[i] << endl;
cout << " --- *names[i] = " << *names[i] << endl;
cout << endl;
cout << " --- (*names[i] + 1) = " << (*names[i] + ) << endl;
cout << " --- (char)(*names[i] + 1) = " << (char)(*names[i] + ) << endl;
cout << " ------------------------------------ " << endl << endl << endl << endl;
}
return ;
}

cout<<*names[i]<<endl; 输出结果为对应得指针数组的第一个字符,因为 *name 代表指向数组的第一个地址的值

#include <iostream>
using namespace std; void pointerArray();
void pointerArray4Char();
const int MAX = ; int main(void){
// pointerArray();
pointerArray4Char();
return ;
} void pointerArray(){
int var[MAX] = {,,};
int *ptr[MAX];
for(int i = ; i < MAX; i++){
ptr[i] = &var[i];//赋值为整数的地址
}
for(int i = ; i < MAX; i++){
cout << "Value of var[" << i << "] = ";
cout << *ptr[i] <<endl;
}
} /**
* 用一个指向字符的指针数组来存储一个字符串列表
* Value of names[0] = sun;
*/
void pointerArray4Char(){
const char *names[MAX] = {
"sun","bin","sunbin"
};
for(int i = ;i < MAX;i++){
cout <<"Value of names[" << i << "] = ";//输出字符串的值
cout << names[i] << endl;
cout <<"Value of *names[" << i << "] = ";//输出指针所指向字符串首地址的值
cout << *names[i] << endl;
cout <<"Value of *names[" << i << "]+1 = ";//输出ascii码值
cout << *names[i]+ << endl;
cout <<"Value of *(names[" << i << "]+1) = ";//输出指针所指向字符串首地址上一位的值
cout << *(names[i]+) << endl;
}
}

char *names[MAX] 这种字符型的指针数组是存储指针的数组,但是在理解字符型指针数组的时候,可以将它理解为一个二维数组,如 const char *names[4] = {"Zara Ali","Hina Ali","Nuha Ali","Sara Ali",} 可以理解为一个 4 行 8 列的数组,可以用 cout << *(names[i] + j)<< endl 取出数组中的每个元素。

#include <iostream>

using namespace std;

const int MAX = ;
int main ()
{
const char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
}; for (int i = ; i < MAX; i++)
for (int j = ; j < ; j++)
{
cout << "Value of names[" << i << "] = ";
cout << *(names[i] + j)<< endl;
}
return ;
}

结果:

Value of names[0] = Z
Value of names[0] = a
Value of names[0] = r
Value of names[0] = a
Value of names[0] =
Value of names[0] = A
Value of names[0] = l
Value of names[0] = i
Value of names[1] = H
Value of names[1] = i
Value of names[1] = n
Value of names[1] = a
Value of names[1] =
Value of names[1] = A
Value of names[1] = l
Value of names[1] = i
Value of names[2] = N
Value of names[2] = u
Value of names[2] = h
Value of names[2] = a
Value of names[2] =
Value of names[2] = A
Value of names[2] = l
Value of names[2] = i
Value of names[3] = S
Value of names[3] = a
Value of names[3] = r
Value of names[3] = a
Value of names[3] =
Value of names[3] = A
Value of names[3] = l
Value of names[3] = i

(5)指向指针的指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:

int **var;

当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符

#include <iostream>

using namespace std;

int main ()
{
int var;
int *ptr;
int **pptr; var = ; // 获取 var 的地址
ptr = &var; // 使用运算符 & 获取 ptr 的地址
pptr = &ptr; // 使用 pptr 获取值
cout << "var 值为 :" << var << endl;
cout << "*ptr 值为:" << *ptr << endl;
cout << "**pptr 值为:" << **pptr << endl; return ;
}

结果:

var 值为 :
*ptr 值为:
**pptr 值为:

c++ 指针(二)的更多相关文章

  1. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  2. C指针(二)

    原文链接:http://www.orlion.ga/924/ 一.指针与const限定符 const限定符与指针结合起来常见的情况有一下几种: const int *a; int const *a; ...

  3. int (*p)[4] p 是二级指针 二维数组 二级指针 .xml

    pre{ line-height:1; color:#2f88e4; background-color:#e9ffff; font-size:16px;}.sysFunc{color:#3d7477; ...

  4. C++笔记-数组指针/二维数组转换指针

    参考资料: 1. 作者 BensonLaur  :https://www.cnblogs.com/BensonLaur/p/6367077.html 2. https://blog.csdn.net/ ...

  5. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  6. C++ 智能指针二

    /* 智能指针shared_ptr注意点 */ #include <iostream> #include <string> #include <memory> // ...

  7. C++指针二(易错模型)

    规则一:Main(主调函数)分配的内存(在堆区,栈区.全局区)都可以在被调用函数里使用.如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的. #include "stdio. ...

  8. C++ 指针二维数组, C++二维指针数组笔记

    C++ 二维动态数组 一. 已知第一维 #include <iostream> using namespace std; int main(int argc, char const *ar ...

  9. c语言中数组,指针数组,数组指针,二维数组指针

    1.数组和指针 ] = {,,,,};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0 ...

  10. C语言中的指针(二)

    指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的.不停的给指针赋值,相当于是不断的改变指针的指向. 在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL ...

随机推荐

  1. debug --- 使用Eclipse

    debug必知(快捷键若无效,有可能是与其它软件的快捷键发生冲突的原因) 1.F6  ——  单步执行代码,即顺序一行行地执行源码 2.F5  ——  跳入当前调用的函数的内部,即进入函数内部执行源码 ...

  2. list实现栈以及队列操作

    1.堆栈stack操作:尾进 尾出 或者叫先进后出 //1借助LinkedList 类中的方法实现栈 public class MyStack { private LinkedList<Obje ...

  3. BZOJ3555 [Ctsc2014]企鹅QQ[暴力+字符串hash]

    菜到自闭,一道省选小水题都能给我做繁. 要求有一位不同,则对每个串每一位暴力枚举把这一位删掉,放一个分隔符,算一下hash,插表,相似的都应该会被插入同一个桶.最后把hash统计一下即可.复杂度$O( ...

  4. fedora29 下一款截图工具shutter的安装和调试

    运行命令安装shutter sudo yum install shutter 如果使用过程中出现花屏 sudo vim /etc/gdm/custom.conf 把 #WaylandEnabled=f ...

  5. 如何下载Direct3D9Ex

    其实就是DirectX june_10月版本,下载链接如下 DirectX Software Development Kit 错误:安装报错“S1023" 若要解决此问题,必须在安装2010 ...

  6. json的值键对,对象,数组,逻辑值

    详细说一下有关json的相关知识: ㈠json与xml的异同 ★与 XML 相同之处 ⑴JSON 是纯文本 ⑵JSON 具有"自我描述性"(人类可读) ⑶JSON 具有层级结构(值 ...

  7. javascript插件制作学习-制作步骤

    原生JavaScript插件开发学习 自己制作的demo大家可以看下https://www.cnblogs.com/zimengxiyu/p/9814889.html 插件制作步骤: (一)构造函数 ...

  8. sqli-labs(39)

    0X01 这关和38关一样 ?id= and =1 正确 ?id=1 and 1=2 错误 不需要闭合 构造语法 0X02 ?id=;insert into users values(,"z ...

  9. sqlmap自动注入 --DETECTION

    --level /usr/shar/sqlmap/xml/payloads 多个脚本 sqlmap里面的payload都在这里面 --risk 1-4(默认 1/ 无害) Risk升高可造成数据被串改 ...

  10. [CSP-S模拟测试]:小盆友的游戏(数学 or 找规律)

    题目传送门(内部题110) 输入格式 第一行一个整数$N$,表示小盆友的个数. 第二行$N$个整数$A_i$,如果$A_i=-1$表示$i$目前是自由身,否则$i$是$A_i$的跟班. 输出格式 一个 ...