c语⾔指针的简单实例c语⾔的指针的存在使得c语⾔对硬件的操控,以及灵活性得到了极⼤的提⾼。
但是指针的使⽤存在着很多难点问题。
#include<stdlib.h>
#include<stdio.h>
//这⾥的函数是指针做参数的例⼦,要知道这个特性可以弥补c语⾔只能有⼀个返回值的特性。
void swap1(int *pa,int *pb){
int t =*pa;
*pa=*pb;
*pb=t;
}
//main()函数必须要返回⼀个数字
int main(){
int a =15;
int b=10;
int* t;
t=&b;
a=b;
b=*t;
printf("%d\n",b);
swap1(&a,&b);
printf("%p\t%p",a,b);
return0;
}
这⾥我们先定义两个整型的变量a,b
然后再定义⼀个临时的指针变量,⽤来存储中间变量
然后将b的变量的内存地址赋值给t,注意这⾥ t 代表的是内存地址
然后把b的值给a,再⽤b接受t地址所存储的变量,注意这⾥的*t是指t这个地址所指的那个变量。
指针与数组
其实数组的int a[10];
⾥来说a其实是这个数组的第⼀个元素的a[0]的指针
所以数组变量本⾝就是表达地址,所以
1int a[10];
2int *p=a; //⽆需⽤&取地址
3
4但是数组的单元表达的是变量,需要⽤&取地址
5 a==&a[0];
6
7 []运算符可以对数组做,也可以对指针做:
8
9
10 p[0] <==>a[0];
指针变量本身有地址吗11这⾥的p[0]相当于*p
12
13 *a可以表⽰a[0]
14
15数组变量是const的指针
const 这个修饰符的作⽤就是表明⼀个变量是指定的值不能改变了
int* const p=&i; //p是const
*q=26;//OK
q++; //ERROR
1int ls=58;
2int ls1=64;
3int* const q=&ls;
4 *q =10;
5 *q=20;
6// q = &ls1; 这句是不能通过编译的,因为这个指针是不能指向其他位置的地址
7//执⾏成功说明这⾥的指针变量是可以被改变的
8 ls=36 ;
9 printf("\n%d",*q);
10//然后我们来看另外⼀种情况
11int P1=10;
12int P2=20;
13int const *T=&P1;
14 T=&P2;//执⾏结果为30
15//*T =15;这⾥是不能通过编译的,因为这个指针指向的位置存储的变量是不能赋值改变的。
16 P2=30;
17 printf("\n%d",*T);
18//关键在于这⾥的const是在*的前⾯还是后⾯决定的
19return0;
1void mai(const int*p){
2
3int *ls=*p;
4 printf("ls的地址:%p",ls);
5 }
6这⾥我们传⼊了⼀个指针,但是在函数⾥,是不能改变这个指针所指向的值的
指针的运算
1 #include<stdio.h>
2 #include<stdlib.h>
3
4int main(){
5int i,j;
6 i=10;j=12;
7 printf("i,j:%d,%d\n",&i,&j);
8 printf("i,j:%d,%d",*&i+1,&j);
9 printf("\n&i-&j:%d",(&i)-(&j));//这⾥两个地址做差其实是地址差/类型所占的位数
10
11int *p;
12 p=&i;
13 *p++;//实际上是*(p++);++优先级⽐*⾼;数组遍历
14 printf("\n*p:%d",*p);
15return0;
16 }
指针的类型转换
void*表⽰不知道指向什么东西的指针
指针变量的⼤⼩是相同的但是,指针是有类型的差别
总之指针的作⽤
1、需要传⼊较⼤的数据的时候⽤做参数
2、传⼊数组后对数组做操作
3、函数返回的结果不⽌⼀个的时候可以⽤指针带出(c只能return⼀个变量,或者值)
需要要⽤函数来修改不⽌⼀个变量
4、动态申请内存.......
具体的后续会更。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论