C指针小结3

现在总结指针的更高一级的用法,其中指向函数的指针在我的博文中已经单独介绍过了,将会补充介绍几点,现在介绍别的指针的用法。

首先介绍几个陷阱:

int f()[];

int f[]();

这两个声明都是非法的,如果有人问这两个声明什么意思,我们应当不加思索的说出这是错误地声明,博主就曾经苦苦思考过这两个声明的意思,现在想想都觉得可笑。

现在对于指向函数的指针补充几点:

例如:

int (*pf)(int)=&f;

现在创建了一个函数指针,并把它初始化为指向函数f,其实初始化表达式的&操作符是可选的,因为函数名被使用时总是由编译器把它转化为函数指针。&操作符只是显示的说明了编译器隐式的执行的任务。

函数名首先被转换为一个函数指针,该指针制定函数在内存中的位置。

除了函数指针还有一个重要的用法就是转化表。就是使用void进行泛型的计算。

我的博文void与泛型计算已经比较清楚的说明了这一问题。

指针最后一个高级应用实例就是命令行参数的使用,也已经介绍过了。

现在介绍关键字const.

const可以创建数组常量,指针常量,以及指针常量的指针。

通常把指向常量的指针用作函数参量,以表明函数不会引用这个指针来修改数据。

void show_array(const  double *ar ,int n)

关于指针赋值和const有一些规则要注意,首先将常量或非常量数据的地址赋给指向常量的指针是合法的。

int rates[10]={0};

const double *p=rates;

然而只有非常量数据的地址才能赋给普通指针:

const double a;

p=a;非法

double *p=rates;合法

声明一个指向固定的地址的指针:

double *const p=rates;这个指针指向数组的第一个元素的地址并且不能改变。

可以使用两个const来进行声明:

const double *const p=rates;不可以修改指针的值和指针指向的内容。

时间: 2024-11-10 01:31:21

C指针小结3的相关文章

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

C指针小结2

在上一篇对指针的小结中只是片面的说明了指针的概况,与基本含义,其实说到指针必然要提及数组,数组与指针有着密不可分的联系.但是切记数组和指针根本是两个东西,指针不能和数组画等号. 数组: 例如 int a[10];这声明的是一个由10个整形组成的数组,其中包含10个整形元素,同时数组名的值是一个指针常量,也就是数组第一个元素的地址.如果前面声明的是其他类型那么,数组名的类型就是"指向其他类型的常量指针".之前说过数组与指针不是一个东西,那么他们的区别在哪里? 1.数组具有确定数量的元素,

指针小结

1.指针与左值.右值 在C++中有左值与右值之分,弄清楚它们的关系和区别很重要.当一个对象用作左值时用的是对象的身份(即其内存),当一个对象用作右值时用的是对象的值(即内容). 例如: int a = 5,b = 6; a=b;   //a是左值,用的是a在内存中的位置 //b是右值,用的是b的值,即6 取地址符作用于一个对象时取这个对象的地址,返回一个指向此对象的指针.所以取地址符作用一个左值对象,返回值是指针,而指针是一个右值.解引用运算符求值结果是左值. 例如: int *p: p的类型为

C指针小结

在C语言的学习中,指针,数组,函数等被我们所熟知,但是真正碰到或者真正用到时,难免有些混淆.下面重点聊一下指针: 指针:通俗讲是内存单元的地址,是个常量.换句话说是地址. 指针变量:在C语言中允许一个变量来存放指针,这个变量就是指针变量.是个变量.换句话说是取值为地址的变量.(但是在平时大家统称指针变量为指针,这个要分清) 指针变量的类型说明: 类型说明符* 变量名:初始化的两种方法:int* p = &a或者int* p;p = &a;( 指针定义时要初始化,这是一个好习惯) 指针变量的

C指针小结1

我认为C语言的核心就是指针和对内存的操作,而操作内存就是由指针实现的,所以说指针真的非常非常重要,在后边的数据结构的学习中更要用指针,如果你立志要走C系统的开发这条路,那么你就应当精通指针的各种应用.下面写一点博主在学习指针时的一点小心得,小体会(仅仅一家之言). 在刚学习指针时是真的一头雾水,感觉好难理解啊,这到底是个什么鬼?为何如此之难?不过在经过很长时间的纠结后博主还是有所体会. 指针: 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存

C++的RAII和智能指针小结

RAII:资源分配即初始化,利用构造函数和析构函数定义一个类来完成对资源的分配和释放 智能指针主要用来防止内存泄漏,我们来举个栗子,看看为什么会有智能指针这个东东 例1: 对于上面这段程序,由于抛出异常的时候影响了代码的执行流,所以要在异常捕获之前将p提前释放(详见 我的博客:C++的异常浅析),虽然可以通过再次抛出以异常解决这个问题,但是在代码美观方面不够完 美,更重要的是如果在代码量非常大,而且在多处有动态开辟出来的空间的时候,仅仅通过再次抛出异常已 经远远不够解决这个问题了,会使得工作量大

学习点滴记录之三指针小结

1.简单来的说,指针也是一种变量,占有内存空间,并且指向内存地址. 2.声明时,*表示声明的变量为指针:操作时,*表示对指针指向内存空间的值进行操作. *p相当于通过地址(p变量的值)找到内存,并对该内存进行操作. *p放在“=”左边,表示对内存进行赋值运算:放在右边,则是读取该内存中的值. 3.指针变量和它指向的内存块是两个不同的概念 //含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容:p = p +1; //p++ //含义2 给*p赋值*p='a'; 不会改变指

C和指针小结

C和指针 相关基础知识:内存的分配(谭浩强版) 1.整型变量的地址与浮点型/字符型变量的地址区别?(整型变量/浮点型变量的区别是什么) 2.int *p,指向整型数据的指针变量. 3.通过指针变量访问整型变量. 4.*p :指针变量p指向的存储单元(变量) 5.p = &a——>> *p = *&a 6.用指针作函数参数 7.调用函数中,由于虚实结合是采用单向的“值传递”方式,只能从实参向形参传数据,形参值的改变无法回传给实参. 8.引用一个数组元素可以用(1)下标法(2)指针

指针和数组(上)

1)指针基础: 既然程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间, int main() { int i=5; int *p=&i; printf("%d,%08x\n",i,p); *p=10; printf("%d,%08x\n",i,p); return 0; } 指针本质: 指针在本质上也是一变量, 指针需要要占用一定的内存空间, 指针用于保存内存地址的值, *号的意义: 在指针声明时,*号表示所声明的变量为指针