指针怎么用

1.c语言中指针怎么使用1、指针指向变量:下面有这样一个代码块:int main() {int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);} void test(int x,int y) {int tmp;tmp=x;x=y;y=tmp;} 最后输出的结果还是a=10,b=15 。
因为在函数调用时,实参和形参之间只是值传递 。但我们使用指针结果就不一样了,如:int main() {int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;} void test(int * x,int *y) {int tmp;tmp=*x;*x=*y;*y=tmp;} 输出结果a=15,b=10 。
变量a和b的值发生了交换 。这是因为我们利用指针访问变量的存储单元,间接修改变量的值 。
2、指针指向数组:定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址 。因此我们的指针变量就指向了数组的首元素,*p=2 。
如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:int main() {int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i3、指针指向字符串:我们都知道用数组存储字符串,如char name[20]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符 。4、指针指向函数:我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:int sum(int x,int y) {return x+y;} int main() {int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %d\n",result);return 0;} 不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点 。
而我们要知道怎样定义一个指针指向函数,int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int当然就是指针将指向的函数的形参 。5、指针指向结构体:我们首先首先定义一个结构类型,struct student { char *name; int ages;}; 再根据类型定义结构体变量struct student stu={"Rose",15}; 定义一个指针指向结构体类型,struct student *p;把结构体变量stu的地址赋给指针变量p,p=&stu; 我们可以有3种方式来访问结构体中的属性ages:stu.ages=15;(*p).ages=15;p->ages=15;不过第三种方式在C语言中只能用来指向结构体 。
扩展资料:指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递 。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率 。
简单地说指针就是指向变量和对象的地址 。基本说明:1、在计算机中,所有的数据都是存放在存储器中的 。
一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等;2、为了正确地访问这些内存单元,须为每个内存单元编上号 。根据一个内存单元的编号即可准确地找到该内存单元 。
既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针 。内存单元的指针和内存单元的内容是两个不同的概念 。
参考资料:搜狗百科-指针 。
2.c语言中指针怎么使用1、使用场景使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:#include#include int main(int argc, char const *argv[]){int a[5]={0,1,2,3,4};int *b,*d;int c=2;int *e=a; //e指向a数组首地址//*b=2; 无法直接初始化//printf("%d\n", *b);e=e+2; //移动两个地址单元d=&c; //d指向c的地址来表示值c=4; //修改原c变量的值,d指针的值会发生改变b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值*b=2;//分配空间后可以直接赋值了printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);2、类型说明(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元(2)char *b:表示一个指向char变量的指针*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:int nums[5]={0,1,2,3,4};int *a=nums;printf("%d %d %p\n",*a,*(a+1),a);扩展资料:指针的运算指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加 。