一级指针
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);
}