c语言指针常量问题,c语言编程--指针常量、常量指针、空指针、野指针

本文详细介绍了C语言中的指针概念,包括常量指针(指针不可变但可修改其指向的内容)、指针常量(指针地址不可变但可改变指向的内容)、空指针(void指针可指向任意类型但无法直接引用)以及函数指针(可以作为参数传递)。同时,强调了void指针的使用限制和注意事项,以及如何判断指针是否为空。最后提到了函数指针的作用,即作为参数传递给其他函数。
摘要由CSDN通过智能技术生成

p=&t;(正确) //常量指针的地址可以修改

2.

指针常量:指针所指向的地址不能改变,但是可以改变其所指向的内容。

类型 * const  指针常量名=&变量名;

如:const int k=5,t=8;

int * const p;

*p=12;(正确) //常量指针指向的内容是常量,可以赋值 p=&t;(错误) //常量指针的地址不可以修改

分析:关键看本质是什么,常量指针----本质是指针,则指向内容可以变化,指针常量----本质是常量,则内容可以变化。指针数组和数组指针是一样分析。

3.

空指针(void pointers)

void 指针可以指向任意类型的数据。唯一的限制是被指向的值不能被直接引用(即不可以对它们使用解引符*),因为它的长度是不定的。

因此,必须使用类型转换操作或赋值操作来把 void 指针指向一个具体的数据类型。

p=NULL,就是说:内存单元0x*****不存放任何变量的内存地址。

空指针是一个特殊的指针值,也是唯一一个对任何指针类型都合法的指针值。指针变量具有空指针值,表示它当时处于闲置状态,没有指向有意义的东西。空指针用0表示,C语言保证这个值不会是任何对象的地址。给指针值赋零则使它不再指向任何有意义的东西。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL.    程序里可以写 p = 0;     或者 p = NULL; 两种写法都把p置为空指针值。相对而言,前一种写法更容易使读程序的人意识到这里是一个指针赋值。

无类型指针 void * p

void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义。

void真正发挥的作用在于:

(1) 对函数返回的限定;

(2) 对函数参数的限定。

void的作用①对函数返回的限定。②对函数参数的限定。当函数不需要返回值时,必须使用void限定。例如:void func(int, int);当函数不允许接受参数时,必须使用void限定。例如:int func(void)。

由于void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值,因此还可以用void指针来作为函数形参,这样函数就可以接受任意数据类型的指针作为参数。例如:void * memcpy( void *dest, const void *src, size_t len );

void * memset( void * buffer, int c, size_t num);

规则三小心使用void指针类型按照ANSI(AmericanNationalStandardsInstitute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:void * pvoid;

pvoid ++;//ANSI:错误pvoid += 1;//ANSI:错误规则五void不能代表一个真实的变量下面代码都企图让void代表一个真实的变量,因此都是错误的代码:void a;//错误function(void a);//错误void体现了一种抽象,这个世界上的变量都是“有类型”的,void的出现只是为了一种抽象的需要,如果你正确地理解了面向对象中“抽象基类”的概念,也很容易理解void数据类型。正如不能给抽象基类定义一个实例,我们也不能定义一个void(让我们类比的称void为“抽象数据类型”)变量。

判断指针是否为空的问题.很显然,if (p == NULL), if (p == 0)和if(p),都能够完成这一任务。

函数指针(Pointers to functions)

函数指针即指向函数的指针。它最大的作用是把一个函数作为参数传递给另外一个函数。

函数指针声明形式:

int (*f)(int, int);

指针函数(Pointers of functions)

指针函数即函数的返回值为指针。

指针函数声明形式:

int * f(int, int);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值