欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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;
}