c 指针问题

逐步记录一下指针学习过程中的知识点,以备后续复习使用

1.假设 p 是指向数组 arr 中第 n 个元素的指针,那么 *p++、*++p、(*p)++ 分别是什么意思呢?

*p++ 等价于 *(p++),表示先取得第 n 个元素的值,再将 p 指向下一个元素
*++p 等价于 *(++p),会先进行 ++p 运算,使得 p 的值增加,指向下一个元素,整体上相当于 *(p+1),所以会获得第 n+1 个数组元素的值。

(*p)++ 就非常简单了,会先取得第 n 个元素的值,再对该元素的值加 1。假设 p 指向第 0  个元素,并且第 0 个元素的值为 99,执行完该语句后,第 0  个元素的值就会变为 100。

2.字符串指针

1) 字符串的两种表示方式

char str[]="http://c.biancheng.net";

或者  char*str="http://c.biancheng.net";

两种方式都可以采用%s输出整个字符串,都可以使用*[ ]获取单个字符

区别:字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,

而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。

如何选择?在编程过程中如果只涉及到对字符串的读取,那么字符数组和字符串常量都能够满足要求;如果有写入(修改)操作,那么只能使用字符数组,

不能使用字符串常量。

1
2
3
4
5
int main(){
  int a[4]={1,2,3,4};
  int *ptr=( int *)(&a+1);
  printf ( "%d" ,*(ptr-1));
}

答案为4

解答:

C 语言中,对1个指针加一的结果是对该指针移动到下一个存储着相同数据元素类型元素的单元。

括号中的(&a+1),其实际指针类型为  int(*)[4]  ,指针指向的类型为   int()[4] ,

所以对  &a  指针加一的结果是移动到下一个  int()[4]  的单元,即当前数组尾的下一个单元。

在进行了指针类型转换后,指针类型变为int *,指针指向类型变为 int,此时ptr-1的结果就是把指针向前移动一个int类型的大小,正好指向数组最后一个元素



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值