C语言05 指针 传递与偏移

一级指针

1.

按变量地址存取变量值的方式称为“直接访问”方式   如int i = 3;

另一种存取变量值的方式称为“间接访问”的方式。即,将变量i的地址存放在另一个变量中。

在C语言中,指针是一种特殊的变量,它是存放地址的。

定义指针变量的一般形式为 基类型  *指针变量名;

 

#include<stdio.h>
int main() {
	//直接访问
	int i = 3;
	//间接访问
	int *p = &i;
	printf("*p = %d", *p);
}

  

注意:

在定义指针变量时必须指定其类型。 需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中

 float  a;           int  * pointer_1;           pointer_1=&a;  (X)

2.指针的传递

#include<stdio.h>
void change(int j) {
	j = 5;
}
int main() {
	int i = 10;
	printf("before change i = %d\n", i);
	change(i);
	printf("after change i = %d\n", i);
}

 注意:以上代码是不能改变i的值的

 

  修改以后的代码:

  通过指针的传递,实现在子函数改变主函数中某一个变量的值

  

#include<stdio.h>
void change(int *j) {
	*j = 5;
}
int main() {
	int i = 10;
	printf("before change i = %d\n", i);
	change(&i);
	printf("after change i = %d\n", i);
}

  

3.在工作中,我们把对指针的加减,称之为指针的偏移,加就是向后偏移,减就是向前偏移

  遍历数组的几种方法:

  方法一:

  

#include<stdio.h>
#define N 5
int main() {
	int a[N] = { 1,2,3,4,5 };
	int i;
	for ( i = 0; i < N; i++)
	{
		printf("%3d", a[i]);
	}
}

  方法二:

  

#include<stdio.h>
#define N 5
int main() {
	int a[N] = { 1,2,3,4,5 };
	int i;
	int *p;
	p = a;
	for ( i = 0; i < N; i++)
	{
		printf("%3d", p[i]);
	}
}

  方法三:

  

#include<stdio.h>
#define N 5
int main() {
	int a[N] = { 1,2,3,4,5 };
	int i;
	int *p;
	p = a;
	for ( i = 0; i < N; i++)
	{
		printf("%3d", *(p+i));
	}
}

在方法三中,p与a皆为数组的起始地址,*p = *(p + 0) = a[0] = p[0] = 1   *(P + 1) = a[1] = p[1] = 2    *(p + 2) = a[2] = p[2] = 3    *(p + 3)  = a[3] = p[3] = 4    *(p + 4) = a[4] = p[4] = 5

 

打印结果均为下图:

 

++与指针的结合使用:

例:计算如下程序的结果:

        

#include<stdio.h>
int main() {
	int a[3] = { 2,7,8 };
	int *p;
	int j;
	p = a;
	j = *p++;// j = *p;  p = p + 1;
	printf("a[0] = %d, j = %d, *p = %d\n", a[0],j,*p);
	j = p[0]++;// j = p[0];  p[0] = p[0] + 1;
	printf("a[0] = %d, j = %d, *p = %d\n", a[0], j, *p);
}

  

发布了66 篇原创文章 · 获赞 0 · 访问量 1096

猜你喜欢

转载自blog.csdn.net/smallrain6/article/details/105098818