C语言指针入门的简单实例教程
LeoZhao 人气:0这篇文章主要给大家介绍了关于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); return 0; }
这里我们先定义两个整型的变量a,b
然后再定义一个临时的指针变量,用来存储中间变量
然后将b的变量的内存地址赋值给t,注意这里 t 代表的是内存地址
然后把b的值给a,再用b接受t地址所存储的变量, 注意这里的*t是指t这个地址所指的那个变量。
指针与数组
其实数组的int a[10];
里来说a其实是这个数组的第一个元素的a[0]的指针
所以数组变量本身就是表达地址,所以
int a[10]; int *p=a; //无需用&取地址 但是数组的单元表达的是变量,需要用&取地址 a==&a[0]; []运算符可以对数组做,也可以对指针做: p[0] <==>a[0]; 这里的p[0]相当于*p *a可以表示a[0] 数组变量是const的指针
const 这个修饰符的作用就是表明一个变量是指定的值不能改变了
int* const p=&i; //p是const *q=26;//OK q++; //ERROR
int ls=58; int ls1=64; int* const q=&ls; *q =10; *q=20; // q = &ls1; 这句是不能通过编译的,因为这个指针是不能指向其他位置的地址 //执行成功说明这里的指针变量是可以被改变的 ls=36 ; printf("\n%d",*q); //然后我们来看另外一种情况 int P1=10; int P2=20; int const *T=&P1; T=&P2;//执行结果为30 //*T =15;这里是不能通过编译的,因为这个指针指向的位置存储的变量是不能赋值改变的。 P2=30; printf("\n%d",*T); //关键在于这里的const是在*的前面还是后面决定的 return 0;
void mai(const int*p){ int *ls=*p; printf("ls的地址:%p",ls); } 这里我们传入了一个指针,但是在函数里,是不能改变这个指针所指向的值的
指针的运算
#include<stdio.h> #include<stdlib.h> int main(){ int i,j; i=10;j=12; printf("i,j:%d,%d\n",&i,&j); printf("i,j:%d,%d",*&i+1,&j); printf("\n&i-&j:%d",(&i)-(&j));//这里两个地址做差其实是地址差/类型所占的位数 int *p; p=&i; *p++;//实际上是*(p++);++优先级比*高;数组遍历 printf("\n*p:%d",*p); return 0; }
指针的类型转换
void*表示不知道指向什么东西的指针
指针变量的大小是相同的但是,指针是有类型的差别
总之指针的作用
1、需要传入较大的数据的时候用做参数
2、传入数组后对数组做操作
3、函数返回的结果不止一个的时候可以用指针带出(c只能return一个变量,或者值)
需要要用函数来修改不止一个变量
4、动态申请内存.......
具体的后续会更。
总结
加载全部内容