C 语言]指针 - 指针运算
最编程
2024-05-02 13:04:50
...
char a[20];
int *ptr=(int*)a;//强制类型转换并不会改变a的类型
ptr++;
在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整型变量a.接下里的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4,因为在32位程序中,int占4个字节。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的4个字节,此时指向了数组a中从第4号单元开始的四个字节。
int array[20]={0};
int *ptr=array;
for(i=0;i<20;i++){
(*ptr)++;
ptr++;
}
此例将整型数组中各个单元的值加1.由于每次循环都将指针ptr加1个单元,所以每次都能访问数组的下一个单元。
char a[20]="You_are_a_girl";
int *ptr=(int*)a;
ptr+=5;
加5后,ptr已经指向数组a的合法范围之外了。虽然这种情况在应用上会出问题,但在语法上却是可以的。
两个指针不能进行加法运算,这是非法操作。
指针相减:指针减指针的绝对值指的是两个指针之间元素的个数。
前提:两个指针必须指向同一空间(指向同一个数组中的元素)
eg: &arr[9]-&arr[0]
指针的关系运算
指针于指针之间比较大小
只有当两个指针指向同一个数组中的元素时,才能进行关系运算
eg: 指针p和q指向同一数组中的元素
- p<q 当p所指的元素在q所指的元素之前时,为1,反之为0
- p>q 当p所指的元素在q所指的元素之后时,为1,反之为0
- p==q 所指元素相同为1,反之为0
- p!=q 所指元素不同为1,反之为0
编写程序将一个字符串反向输出
#include<stdio.h>
int main(){
char str[50],*p,*s,c;
printf("Enter string:");
gets(str);
p=s=str;//将指针初始化
while(*p){
p++;//将p指向字符串最后
}
p--;
while(s<p){
c=*s;
*s++=*p;
*p--=c;
}
puts(str);
return 0;
}
上一篇: 了解一棵树是一件美好的事情
下一篇: 网关与 Nacos!!!! 结合使用