指针

指针———c语言的灵魂

1.交换两个变量的值

#include <stdio.h>
void swap(int *pa,int *pb){
    int t=*pa;
    *pa=*pb;
    *pb=t;
}

int main(){
    int a=5;
    int b=6;
    swap(&a,&b);
    printf("%d %d",a,b);
}

2.函数返回多个值,某些值就只能通过指针返回

//实际上传入的参数就是返回结果的

#include <stdio.h>

void minmax(int a[],int len,int *max,int *min){
    	for(int i=0;i<len;i++){
			if(a[i]<*min){
                *min=a[i];
            }
            if(a[i]>*max){
                *max=a[i];
            }
        }
}

int main(){
	int a[100];
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
    }
    int min,max;
    minmax(a,sizeof(a)/sizeof(a[0]),&max,&min);
    printf("%d %d",min,max);
}

写下来这个题目的原因是首先可以进行计算数组的长度,再者是可以很好的利用指针进行多个返回的效果。

3.函数返回运算的状态,结果通过指针返回

//java中运用异常来处理

指针与数组

在函数里面,int a[]其实是一个指针类型

  1. 数组变量本身表达一个地址
such as: void (int a[]){}

如果int *p;
    
printf("%d",*p);
printf("%d",p[0]);

输出结果相同。
  1. 数组之间不能被赋值

  2. 数组其实就是一个const的指针

    指针与const

    1. 表示const是不能被改变的值,也可以说是指针的地址。

    2. int *const p=&i;
      地址不能被修改
      上面所指。
      下面来说
       const int *p=&i;
      表示不能通过指针去改变变量的值
          such as{
          *p=26;//error
          i=26;//OK
          p=&j;//OK
      }
      

      转换

      总是可以将一个非const的值转换成const的

      void f(const int *x);

      当要传递的参数的类型比地址还要大的时候。

      既能用于比较少的字节数值给参数,又能避免函数对外面变量的修改。

      指针运算

      1. #include <stdio.h>
        int main(){
        	char ac[]={0,1,2,3,4,5,6};
        	char *p=ac;
            p+1//是地址的后传
        }
        //指针的地址(顺带提一嘴,char是1个字节)
        

        指针减法的意义是从一个地址到另一个地址,中间可以存放多少个这样字节的数据。

        //*p++;
        //取出p所指的那个数据来,然后将p移到下一个位置
        //*的优先级不大于++
        //下面写一下用指针进行遍历
        //常用于数组类
        #include <stdio.h>
        int main(){
        	char ac[]={0,1,2,3,4,5,6,7,8,9};
            char *p=&ac[0];
            int i;
            for(i=0;i<sizeof(ac)/sizeof(a[0]);i++){
                printf("%d",ac[i]);
            }
            while(*p!=-1){
                printf("%d",*p++);
            }
            int a[]={0,1,2,3,4,5,6,7,8,9};
            int *q=a;//传进第一个值
            return 0;
        }
        

本文作者:EricFirst001

本文链接:https://www.cnblogs.com/cuers/p/17541628.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   EricFirst001  阅读(8)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起