我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c++指针怎么初始化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c++指针怎么初始化

这篇文章主要介绍“c++指针怎么初始化”,在日常操作中,相信很多人在c++指针怎么初始化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++指针怎么初始化”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

c++指针全攻略

1、指针概念理解

        int*  p      定义一个指针(推荐使用这种写法int* ,理解上有好处)
        p     指针变量;
        *      间接运算符(访问符),代表访问该地址所指向的空间;
        *p      指针所保存(指向)的地址中对应(指向)的值;
        &p      获取指针变量的内存地址(指针本身占用内存空间);
        故 指针是

    (1)通过间接的方式访问内存空间(直接方式是通过变量名称(内存空间名字)直接访问空间);

    (2)指针是一种保存变量内存地址的变量,自身也占用内存空间。

    eg:

     指针初始化的两种方式

int a = 40;

//指针初始化方式第一种写法
int* p;//p是指针变量,而不是*p
p = &a;//指针变量用来存放内存地址;注意,此处使用*p = &a是错误的定义,应该是对p(指针变量)赋值,而不是*p(指针保存的地址指向的值)

//指针初始化方式第二种写法,实质是第一种写法的简化方式。
int* p1 = &a;

cout << " &p--对指针变量取地址--输出指针变量的地址:" << &p << endl;
cout << " *p--该指针保存的地址对应的值--输出指针所存放的地址对应的在堆内存中的值:" << *p << "\n";
2、声明指向int类型的指针,即指针包含的地址对应的内存单元存储了一个整数
int* p = NULL;

 3、使用 指针 存储 由地址运算符&  获取的地址

int age = 30;
int* pa = &age;
cout << "*pa = " << *pa << endl;
cout << "pa = " << pa << endl; //age的内存地址
cout << "&age = " << &age << endl;
cout << "指针自身的地址----&pa = " << &pa << endl; //指针自身的地址
4、const指针
int day = 30;
int* const pDay = &day; //指针包含的地址是常量---常量指针
cout << pDay << endl;

int hour = 24;
const int* pHour = &hour; //指针指向的数据是常量---指向常量的指针
cout << pHour << endl;

int h = 24;
const int* const ph = &h; //指针包含的地址以及指向的值都是常量---指向常量的常量指针
cout << ph << endl;

  5、 声明指向内存块的指针,即void指针

   void 指针是一种特殊的指针,表示为“无类型指针”,由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换。

   eg:

void* p1;
int* p2;
p1 = p2;
p2 = (int* )p1;

    6、野指针:

   把没有合法指向的指针称为“野”指针。因为“野”指针随机指向一块空间,该空间中存储的可能是其他程序的数据甚至是系统数据,故不能对“野”指针所指向的空间进行存取操作,否则轻者会引起程序崩溃,严重的可能导致整个系统崩溃。

    eg:

int *pi,a; //pi未初始化,无合法指向,为“野”指针
*pi=3; //运行时错误!不能对”野”指针指向的空间做存入操作。该语句试图把 3 存入“野”指针pi所指的随机空间中,会产生运行时错误。
a=*pi; //运行时错误!不能对”野”指针指向的空间取操作。该语句试图从“野”指针pi所指的空间中取出数据,然后赋给变量a同样会产生运行时错误。

 7、指针运算

    eg:

        int* p = 4;

   p++;

c++指针怎么初始化

      指针变量 p 进行 p++,p 是一个 int 类型的指针,指向内存地址 0x10000008 处。则 p++ 将指向与 p 相邻的下一个内存地址,由于 int 型数据占 4 个字节,因此 p++ 所指的内存地址为 1000000b。这种运算并不会改变指针变量 p 自身的地址,只是改变了它所指向的地址(存放的地址)。

8、补充:
  c++指针内存空间释放
int* pb = new int;
int* pb2 = new int[4];
delete pb;
delete[] pb2;

9、数组与指针:

   (1)一维数组和指针

int* p,a[10] = {1,2,3,4,5}; 
p = a;//p指向数组a的首地址,即p=&a[0],数组名相当于数组首元素的地址a[0]

//数组的访问方式
//1、直接访问---数组名[下标]
cout << a[1] << "\n";

//2、间接访问---*(数组名+i)
cout << *(a+2) << endl;//  a+2表示数组首地址向后移动2个位置,a+2相当于&a[2]

//3、间接访问--- *(指针变量)
for (int i=0; i<10; i++) {
    cout << * p++ << endl;//++运算符的优先级要高于*
}
指针数组:存储指针的数组,int* p[5]
int a0,a1,a2,a3;
int* b[5];
b[0] = &a0;
b[1] = &a1;
b[2] = &a2;
数组指针:指向一维数组的指针,int (*p)[5]
int c[3][4];
    int (*p)[4];//定义一个数组指针,指向含4个元素的一维数组
    p = c;//二维数组的首地址赋给p,即a[0],或&a[0][0]

(2)二维数组

int* p; 
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 
p = &a[0][0];

//通过数组下边直接访问



cout << "a[0][0]的地址:" << a << endl;
cout << "a[0][1]的地址:" << a+1 << endl;
cout << "a[1][0]的地址:" << a[1]+0 << endl;
cout << *(a+1)+0 << endl;
cout << &a[1][0] << endl;
10、函数与指针:
(1)指针函数,函数返回调用者某个地址即指针类型;
char* str_cat(char* c1, char* c2){
    char* p1 = c1;
    char* p2 = c2;
    while (*p1!='\0'){
        p1++;
    }

    *p1++=' ';

    while (*p2!='\0'){
        *p1++=*p2++;
    }

    return c1;//返回结果为指针类型
}

 (2)函数指针---指向函数的指针

int* pf (int, int);//函数的返回值为int指针类型,int*
    int (*pf1) (int, int);//函数指针变量pf,可以指向任意含有两个整形参数,且返回值为整形的函数
    pf = &fun;
    pf = fun;//可以不用取地址,一个函数标识符就代表了它的地址

      调用函数指针的方式两种方式

x = (*func)();
    x = func();

到此,关于“c++指针怎么初始化”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c++指针怎么初始化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c++字符串指针怎么初始化

在C++中,字符串指针可以通过以下几种方式进行初始化:使用字符数组初始化字符串指针:char str[] = "Hello";char* ptr = str;使用字符串字面值初始化字符串指针:char* ptr = "Hello";动
2023-10-27

C语言指针如何初始化

C语言指针可以通过以下几种方式进行初始化:1. 直接赋值给另一个指针:可以通过将一个指针的值直接赋值给另一个指针来进行初始化。例如:```cint *ptr1;int *ptr2;int num = 10;ptr1 = # //
2023-08-18

c语言结构体指针数组怎么初始化

在C语言中,结构体指针数组的初始化可以通过以下几种方式进行:逐个初始化:通过逐个为每个元素赋值。例如:struct Person {char name[20];int age;};struct Person *people[3];peop
2023-10-27

c++指针数组初始化的方法是什么

C++中,可以使用以下方法来初始化指针数组:1. 使用一维数组初始化指针数组:cppint arr[] = {1, 2, 3};int* ptrArr[3];for (int i = 0; i ptrArr[i] = &arr[i];}2.
2023-10-18

C++用NULL来初始化空指针合适吗

本篇内容介绍了“C++用NULL来初始化空指针合适吗”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.C++98中的空指针我们知道,在良好的
2023-06-30

c语言二级指针初始化的方法是什么

二级指针是指指向指针的指针,也就是指针的指针。在C语言中,初始化二级指针的方法如下:int num = 10; // 定义一个整型变量int *ptr = # // 定义一个指向整型变量的指针,并将其指向num变量的地址i
c语言二级指针初始化的方法是什么
2024-03-12

C语言指针数组初始化的方法是什么

C语言中,指针数组的初始化可以通过以下两种方式实现:1. 逐个初始化:可以使用类似于普通数组的方式逐个为指针数组的元素赋值。例如:cint* arr[3]; // 声明一个包含3个整型指针的数组int a = 1, b = 2, c =
2023-10-18

C++11中longlong超长整型和nullptr初始化空指针

本文介绍 C++11 标准中新添加的 long long 超长整型和 nullptr 初始化空指针,在 C++11 标准下,相比 NULL 和 0,使用 nullptr 初始化空指针可以令我们编写的程序更加健壮,本文结合示例代码给大家详细讲解,需要的朋友跟随小编一起看看吧
2022-12-31

C++11中longlong超长整型和nullptr初始化空指针怎么使用

这篇“C++11中longlong超长整型和nullptr初始化空指针怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“
2023-07-04

C#怎么初始化数组

本篇内容介绍了“C#怎么初始化数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!初始化数组声明一个数组不会在内存中初始化数组。当初始化数组变
2023-06-17

即使初始化,零指针也会取消引用

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《即使初始化,零指针也会取消引用》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞
即使初始化,零指针也会取消引用
2024-04-04

将结构体初始化为指针的目的是什么?

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《将结构体初始化为指针的目的是什么?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自
将结构体初始化为指针的目的是什么?
2024-04-04

C#中怎么初始化变量

这篇文章将为大家详细讲解有关C#中怎么初始化变量,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#变量初始化的操作中有两个方法可确保变量在使用前进行了初始化:◆变量是类或结构中的字段,如果没
2023-06-17

C#中怎么初始化数组

这篇文章给大家介绍C#中怎么初始化数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#数组初始化三大方法示例// Single-dimensional array (numbers). int[] n1 = ne
2023-06-17

C++中怎么初始化vector容器

C++中怎么初始化vector容器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、STL的基本概念STL(Standard Template Library)标准模板库大
2023-06-20

c语言数组怎么初始化

本篇内容主要讲解“c语言数组怎么初始化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c语言数组怎么初始化”吧!C语言数组初始化的三种方式:1、在定义时直接赋值,语法“数据类型 arrayName
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录