什么是指针:
指针就是一个变量,是一个存放内容的内存空间。
指针存放的内容是另一个内存空间的起始地址。不同于一般变量存放的就是变量值。
取值操作符*对于指针的作用是取得指针变量存放的内存地址里面的值,不加*取出的是指针变量存放的值(就是一个内存地址)

//定义指针变量 通过指针变量来赋值 

#include <stdio.h>
int main(int argc, char *argv[])
{
   char a;

//定义一个指针指向变量a的内存地址,p只能指向char类型 因为不同类型的变量所占用的字节数不一样

  char *p=&a

  *p=10;

  printf("%d",a);//打印出来的结果为 10

  printf("%d",*p);//这样相当于取出变量a的值通过内存地址
    return 0;
}

#include <stdio.h>
//使用指针交换两个的值
void swap(char v1 char v2){
    char temp;
    temp=v1;
    v1=v2;
    v2=temp;
}

void swap2(char *v1 char *v2){
    char temp;
    temp=*v1;
    *v1=*v2;
    *v2=temp;
}
int main(int argc, char *argv[])
{
    char a=10;
    char b=20;
    swap(a,b);
    printf("调换后的值为 a=%c::b=%c",a,b);
    //上面的这种方法是不能把a和b的值过来的,而通过指针就可以
    swap2(&a,&b);
    printf("通过指针调换后的值为 a=%c::b=%c",a,b);
    return 0;
}

#include <stdio.h>
//通过指针返回和与差(其实可以返回无限个返回值)
int sumAndMinus(int v1,int v2,int *p){
    *p=v1-v2;
    return v1+v2;
}

int main(int argc, char *argv[])
{
    int a=10;
    int b=4;
    //定义和与差变量
    int sum;
    int minus;
    sum=sumAndMinus(a,b,&minus);
    printf("sum=%d  ::  minus=%d",sum,minus);
    return 0;
}

#include <stdio.h>
//指针和数组
int main(int argc, char *argv[])
{
    int a[2];
    int *p=&a[0];//每个数组的第一个元素的内存地址就是该数组的内存地址
    test1();
    test2();
    test3();
    return 0;
}
//通常遍历数组代码
void test1(){
    int a[3]={1,2,3};
    for(int i=0;i<3;i++){
        printf("a[%d]=%d\n",i,a[i]);
    }
}

//利用指针来遍历数组
void test2(){
    cahr a[3]={1,2,3};
    char *p=&a;//让指针指向第一个元素
    for(int i=0;i<3;i++){
        //char 类型只有一个字节,这里的内存地址相当于是p=fff1 ,p+1=fff3 数组相邻元素的内存地址是相靠的
        printf("a[%d]=%d\n",i,*(p+1));
    }
}
//int 数组类型的遍历
void test3(){
    int a[3]={1,2,3};
    int *p=&a;//
    for(int i=0;i<3;i++){
        //int数组 占两个字节 这里的内存地址相当于是p=fff1 ,p+1=fff3
        printf("a[%d]=%d\n",i,*(p++));
        //这样调用也是可以访问的 但是a++这里不可以,不能够改变a的内存地址(a是个常量)
        printf("a[%d]=%d\n",i,*(a+i));
    }

int *h=a;
    for(int i=0;i<3;i++,h++){
        printf("a[%d]=%d\n",i,*h);
    }
}

//如果你的形参是个数组,既可以传数组名,也可以传指针

//如果你的形参是个指针,既可以传指针,也可以传数组名 可互相切换

//指针修改数值的值

change(char * c){

  *c=10;

  *c+2=11;

  c[2]=10;

}

int main(int argc,const char * argv[]){

 char a[3];

char *p=a;

 change(a); //这里传的就是数组a的内存地址

 change(p);

 printf("%c",a[0]);

}

#include <stdio.h>
//字符串和指针
int main(int argc, char *argv[])
{
    char s[6]="laotan";//这种定义的是个字符数组
    for(int i++;i<6;i++){
        printf("%c\n",s[i]);
    }
    char *p=s;
    for(;*p!='\0';p++){
        printf("%c\n",*P)
    }
    
    //char *p p="laotan";这样也可以
    char *p="laotan";//这种是定义一个字符串常量,值不可改变
    for(;*p!='0\';p++){
        printf("%c\n",*P)
    }

return 0;
}

#include <stdio.h>

//指向函数的指针:因为函数也是有一个存储地址,也有地址,所以可以用指针指向函数
//返回指针的函数
char * test(){
    return "laotan"
}
//函数名就是函数的地址
int sum(int a,int b){
    int c=a+b;
    printf("%d+%d=%d\n",a,b,c);
    return c;
}
int mul(int a,int b){
    return a-b;
}

//a、b之间的运算(指针指向函数的应用)
int count(int a,int b,int (*p)(int,int)){
    return p(a,b);
}

int main(int argc, char *argv[])
{
    printf("%s",test());
    
    //定义了一个被p指向的函数,返回值为int类型,接受两个int类型的参数
    int (*p)(int,int);
    //让指针变量p指向sum函数
    p=sum
    p(5,6);//利用指针变量p来调用p
    //printf((*)(5,6));

//把函数当成参数来传递,实现你先实现再不改当前调用函数的情况下进行不同的运算
    int result=count(3,4,sum);
    int result=count(3,4,mul);

return 0;
}

C语言中指针的使用的更多相关文章

  1. C语言中指针占据内存空间问题

    以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...

  2. 这样子来理解C语言中指针的指针

    友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...

  3. C语言中指针和数组

    C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...

  4. C语言中指针*p[N], (*P)[N],及**p的区别

    在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...

  5. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  6. 编程基础-c语言中指针、sizeof用法总结

    1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...

  7. C语言中指针和多维数组

    指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...

  8. 对C语言中指针的一些新认识

    学C语言这么久了,才发现指针不是想象中那么简单,当初根本就没理解指针怎么用! 变量--是由操作系统自动分配存储空间的    指针--手动分配存储空间或指向已有变量的地址 指针中的内容需要手动释放,而变 ...

  9. C语言中 指针和数组

    C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象.与之相反,指针用来存储单个内存地址.数组和指针不是同一种结构因此不可以互相转换.而数组变量指向了数组的第一个元素的内存地址. 一个数组变 ...

  10. C语言中指针中的值赋值给数组

    如果把各种语言做个冷兵器类比的话,C语言一定是刀客的最佳工具.入门很简单,但是要是能把它熟练运用,那就是顶尖级别的高手了. 用了那么多年的C语言,发现自己还是仅仅处于熟练的操作工.今天遇到了一个bug ...

随机推荐

  1. 关于CDH中开发Spark

    文章发自http://www.cnblogs.com/hark0623/p/4167363.html 转发请注明 注意:基于CDH进行Spark开发时,使用高版本的apache原生包即可:不需要使用C ...

  2. loadrunner中lr_save_searched_string函数的使用

    控制abc后面的第几个字符: 控制字符长度: 总结: 实际应用: Action() { int i =0,j=0; char *tt_url = lr_eval_string("{tt_ur ...

  3. Liferay 6.2 改造系列之二十四:修改liferay密码的加密方式

    为了便于后期与Cas集成过程中使用数据库用户的方便,将liferay密码的加密方式改为SHA. 在/portal-master/portal-impl/src/portal.properties配置文 ...

  4. X-UA-Compatible属性的解释

    问题描述: 代码如下: <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE& ...

  5. 20145223《Java程序程序设计》实验报告5

    20145223杨梦云<Java网络编程> 一.实验内容 ·1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: ·2.利用加解密代码包,编译运行代码,一人加密,一人解密: ·3. ...

  6. Redis 安装为Window服务

    参考: http://www.cnblogs.com/zhoub/p/3841222.html 关键命令 redis-server.exe –service-install conf/redis.co ...

  7. 将公司的主要项目从eclipse迁移到android studio for mac环境(1)

    上星期,我决定要解决这个问题.理由如下: 3个月之前,我已经投入一段时间要做好这个迁移工作,直到最后,我发现能够安装了,但是运行不了,这个过程也看不到bugly上传,在找不到原因的情况下,我放弃了. ...

  8. Visual Studio: 暂时?绕过 fatal error C1083: Cannot open precompiled header file

    可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头.

  9. BZOJ4171 : Rhl的游戏

    把第一行每个位置设成未知量,对于之后每一行,都可以用第一行的未知量线性表示. 那么只需要加上最后一行的$m$个方程,对于不能按的那$k$个位置也列出对应的方程. 用高斯消元判断是否有解即可,时间复杂度 ...

  10. BZOJ4117 : [Wf2015]Weather Report

    一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可. 每次取出概率最小的,将它个数除以2,对于零头需要特判. #include<cstdio> ...