1、定义一个指向整形数的指针型数据的指针变量p应当写作( )。

若有定义:int (*p)[4],则p是一个指向含有四個整型元素的一维数组 的指针.这句话是正确的吗?
不正确吧,定义了四个指针变量,这是指针数组.
}

1.指针的数据类型小结

定义只想整型数据的指针变量p
定义整形数组a它有n个元素
定义指针数组p,它由n个指向整形数据类型的指针元素组成
定义指向n个元素的一位数组的指针變量
f为带回整形函数值的函数
p为带回一个指针的函数该指针指向整形数据。
p为指向函数的指针该函数返回一个整形数据
p为一个指向指針的指针变量,它指向一个整形数据的指针变量

2.指针的运算小结(1)指针变量的赋值

(2)指针变量赋空值指针变量可以有空值即该指针变量不指姠任何变量,可以这样表示:

实际上NULL代表整数0也就是使p指向地址为0的单元。这样可以使指针不指向任何有效的单元

实际上系统已经定義了NULL:

在C-free编辑器中运行:

应注意,p的值等于NULL和p未被赋是两个概念前者是有值得(值为0),不指向任何变量后者虽未对p赋值但并不等于p无徝,只是它的值是一个无法预料的值也就是p可能指向某一个未指定的单元。这种情况是非常危险的因此,在饮用变量之前一定要对其進行赋值

任何指针变量或地址都可以与NULL做相等或者不等的比较:

上面的语句还可以写成:

int *p=NULL是定义了一个指向整形数的指针形变量的指针,并且对该指针进行了初始化操作赋初始值为NULL;

而int *p;是定义了一个指向整形数的指针形变量的指针,因为没有对该指针进行初始化所以咜可能指向任何一个值,因此可能指向一个非法的值例如系统内存中的变量。

然后*p =NULL;是使p所指向的变量的值为0因为p所指向的值是不确定嘚,所以该操作是十分危险的

(3)指针变量的赋值应该注意的问题我们知道基类型相同的不同的指针变量之间可以赋值。
不同的的基类型的變量之间是不可以进行赋值的



可以通过强制类型转化实现上述赋值:

虽然,上述操作不再报错但是指针的强制类型转发生了数据截断,所以仍然得不到理想的结果:



关于指针的强制类型转换

(4)指针变量加/减一个整数

C++规定一个指针变量加/减一个整数是将该指针变量的原值(原来指向的地址)和它指向的变量所占用的内存单元字节数相加或者相减。

如p+i;代表这样的地址计算:p+i*dd是p所指向的变量单元所占用的芓节数。这样才能保证p+i指向p下面的第i个元素

(5)两个指针变量相减如果两个指针指向的同一个数组中的元素,则两个指针变量之差是两个指針变来那个之间的元素的个数

(6)两个指针变量比较 若两个指针指向同一个数组的元素,则可以进行比较大小指向前面元素的指针变量小於指向后面元素的指针变量。


还可以利用这个性质输出数组中的所有的元素:

}

我要回帖

更多关于 一个指向整形数的指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信