本节目录
2.7.1 指针的定义
//2_7_1
#include<stdio.h>
int main(){
int a=1;
printf("%d,%d\n",&a,a);
return 0;
}
2.7.2 指针变量
A.指针变量的定义-- *
a1.单个定义
a2.多个同种类型同时定义
B.给指针变量赋值–&
C.指针变量所指地址的内容 — *p
c1.得到该内容
//2_7_2
#include<stdio.h>
int main(){
int a;
int* p=&a;
a=233;
printf("%d\n",*p);
return 0;
}
c2.操作该内容
//2_7_3
#include<stdio.h>
int main()
{
int a=0;
int* p=&a;
*p=233;
printf("%d, %d\n",*p,a);
return 0;
}
D.指针变量 “加减法”
E.指针变量的基类型
2.7.3 指针与数组
A.数组名作为数组首地址使用
//2_7_4
#include<stdio.h>
int main()
{
int a[10]={1};
int* p=a;
printf("%d\n",*p);
return 0;
}
B.数组名/指针变量访问数组元素
//2_7_5
#include<stdio.h>
int main()
{
int a[10];
for(int i=0;i<10;i++){
scanf("%d",a+i);
}
for(int i=0;i<10;i++){
printf("%d",*(a+i));
}
return 0;
}
枚举
//2_7_6
#include<stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
for(int* p=a;p<a+10;p++){
printf("%d ",*p);
}
return 0;
}
C.指针减法(地址间隔)
//2_7_7
#include<stdio.h>
int main(){
int a[10]={1,4,9,16,25,36,49};
int* p=a;
int* q=&a[5];
printf("q=%d\n",q);
printf("p=%d\n",p);
printf("q-p=%d\n",q-p);
return 0;
}
2.7.4 使用指针变量作为函数参数
A.地址传递是什么
//2_7_8
#include<stdio.h>
void change(int* p){//参数类型是int型指针变量
*p=233;
}
int main(){
int a=1;
int* p=&a;
change(p);//传入一个指针变量
printf("%d ",a);
return 0;
}
B.实现交换两个数的功能
//2_7_9
#include<stdio.h>
void swap(int* a,int* b){
int temp=*a;
*a=*b;
*b=temp;
}
int main(){
int a=1,b=2;
int *p1=&a,*p2=&b;
swap(p1,p2);
printf("a= %d,b=%d\n",*p1,*p2);
return 0;
}
下面指出2种初学容易犯下的错误
b1.错误写法1
//2_7_11
#include<stdio.h>
void swap(int* a,int* b){
int* temp;//temp也是指针变量
*temp=*a;
*a=*b;
*b=*temp;
}
int main(){
int a=1,b=2;
int *p1=&a,*p2=&b;
swap(p1,p2);
printf("a= %d,b=%d\n",*p1,*p2);
return 0;
}
//2_7_11
#include<stdio.h>
void swap(int* a,int* b){
int x;
int* temp=&x;//int* temp;
*temp=*a;
*a=*b;
*b=*temp;
}
int main(){
int a=1,b=2;
int *p1=&a,*p2=&b;
swap(p1,p2);
printf("a= %d,b=%d\n",*p1,*p2);
return 0;
}
b2.错误写法2
//2_7_12
#include<stdio.h>
void swap(int* a,int* b){
int* temp = a;
a=b;
b=temp;
}
int main(){
int a=1,b=2;
int *p1=&a,*p2=&b;
swap(p1,p2);
printf("a= %d,b=%d\n",*p1,*p2);
return 0;
}
2.7.5 引用
A.引用的基本概念
a1.含义
a2.使用
在函数的参数类型后面加&即可(&一般加在参数类型后面或者变量名前面都可以,考虑到引用是变量别名的意思,所以一般加在变量名前面),示例如下:
//2_7_10
#include<stdio.h>
void change(int&x){
x=1;
}
int main(){
int x=10;
change(x);
printf("%d\n",x);
return 0;
}
B.指针的引用
//2_7_13
#include<stdio.h>
void swap(int* &p1,int* &p2){
int* temp=p1;
p1=p2;
p2=temp;
}
int main(){
int a=1,b=2;
int *p1=&a,*p2=&b;
swap(p1,p2);
printf("a=%d,b=%d\n",*p1,*p2);
return 0;
}