指针的本质分析

*号的意义

在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示取指针所指向的内存空间中的值

指针是变量,因此可以声明指针参数

当一个函数体内部需要改变实参的值,则需要使用指针参数

函数调用时实参值将复制到形参

指针适用于复杂数据类型作为参数的函数中

const int* p;  //p可变,p指向的内容不可变

int const* p;  //p可变,p指向的内容不可变

int* const p;  //p不可变,p指向的内容不可变

const int* const p;  //p和p指向的内容都不可变

口诀:左数右指

小结

指针是c语言中一种特别的变量

指针所保存的值是内存的地址

可以通过指针修改内存中的任意地址内容

原文地址:https://www.cnblogs.com/sugarWill666/p/9231648.html

时间: 2024-11-10 16:16:09

指针的本质分析的相关文章

第29课 指针和数组分析(下)

1. 数组的访问方式 (1)以下标的形式访问数组中的元素:如a[i]; (2)以指针的形式访问数组中的元素:如*(a+i) 2. 下标形式 VS 指针形式 (1)指针形式以固定增量在数组中移动时,效率高于下标形式 (2)指针增量为1且硬件具有硬件增量模型时,效率更高 (3)下标形式与指针形式的转换:a[n]==*(a+n)==*(n+a)==n[a]; ▲注意: ①现代编译器的生成代码优化率已大大提高,在固定增量时,下标形式的效率与指针形式相当: ②但从可读性和代码维护的角度看,下标形式更优 [

第51课 继承对象模型分析——多态的本质分析

多态的本质分析 用C写面向对象,用C实现多态 #ifndef _51_2_H_ #define _51_2_H_ typedef void Demo; typedef void Derived; Demo* Demo_Create(int i, int j); int Demo_GetI(Demo* pThis); int Demo_GetJ(Demo* pThis); int Demo_Add(Demo* pThis, int value); void Demo_Free(Demo* pThi

第28课 指针和数组分析(上)

1. 数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 [编程实验]a + 1的结果是什么?  (答案是第2个元素的地址) #include <stdio.h> int main(){ //将数组每个元素初始化为0 int a[5] = {0}; int* p = NULL; printf("a = 0x%X\n",(unsigned int)(a)

C++语言中数组指针和指针数组彻底分析

#################################                              ##       基本知识               ##                              ################################# 当然我们一切都是从最简单的内建类型开始,最后我会做一些推广.先看一下基本的形式,我们从这里起步! Cpp代码 --------------指针---------------- int a

数组与指针的本质

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针".很幸运,我的大学老师就是其中之一.时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解. 想必这种误解的根源在于国内某著名的C程序设计教程.如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,

指针的本质---如何确定指针的类型

前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍 一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一 个类型里会出现很多运算符,他们也像普通的表达式一样,有优先 级,其优先级和运算优先级一样,所以我总结了一下其原则: 从变量名处起,根据运算符优先级结合,一步一步分析. 下面让我们先从简单的类型开始慢慢分析吧: int p; int *p; //这是一个普通的整型变量 //首先从 P 处开始,先与*结合,所以说明 P 是一 //个指针,然后再与 int 结合,

Chromium和WebKit的智能指针实现原理分析

C++不像Java一样,由虚拟机负责对象分配和释放.也就是说,开发人员使用C++编写代码时,要自己负责对象分配和释放.WebKit和Chromium都是使用C++开发的,因此它们也面临上述问题.在解决对象释放问题时,要做到在对象不需要时自动释放,因为手动释放会带来忘记释放或者释放后又继续使用的隐患.智能指针是实现对象自动释放的有效技术手段.本文就分析Chromium和WebKit的智能指针的实现. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在现实中,

第27课 数组的本质分析

1. 数组的概念 (1)数组是相同类型的变量的有序集合 (2)数组在一片连续的内存空间中存储元素 (3)数组元素的个数可以显示或隐式指定 [编程实验]数组的初始化 #include <stdio.h> int main(){ //数组初始化 int a[5] = {1, 2};//第1.2个元素分别为1.2,其余为0 int b[] = {1, 2};//编译过程中,编译会为计算数组b的大小 int i=0; for (i = 0;i < 4;i++) { printf("a[

C++:不同类型的指针的本质与差异

转自:http://blog.csdn.net/richerg85/article/details/10076365 指针的类型(The Type of a Pointer)            一个指向ZooAnimal(一个类)的指针是如何与一个指向整型的指针或者指向template Array的指针有所不同?   ZoolAnimal *px; int *pi; Array< String > *pta;        以内存需求的观点来说,没有什么不同.以上三种类型都有足够的内存来放