C语言中的指针小结

原创 2012年03月27日 17:10:30

阿涛,你要认真对待每一件事情,你要潇洒,你要做自己!

这两天复习了一下C语言中的指针,发现很多东西几乎全忘了,然后在CodeBlocks中打印一些小程序,进行知识的恢复,以后再忘了,就到自己的博客中来查看下,顺便给一些刚学习C语言的同学一个参考,有不对的地方还请大家来指正,有疑问的请给阿涛留言。

一:五个重点概念

int *a;

int **a;

(1)指针的类型:指针本身自己的类型,如上两个指针,指针类型就是:int *, int **

          判断方法:将定义的标识符拿掉,剩下的就是指针的类型

(2)指针指向的类型:指针指向的空间存储的数据的类型,如上两个指针,指针所指向的类型是:int     int*

          判断方法:将定义的标识符和左边的第一个*号拿掉,剩下的就是指针所指向的类型,这个类型决定了编译器对

          这个指向的内存空间中的数据作为什么类型进行处理。

(3)指针所指向的内存空间:由于指针的值就是地址,这个值就是所指向的内存空间的首地址,那么这个地址空间

          有多大呢?然后就需要看你所指向的是什么类型了。比如:   int  a;                char b;

                                                                                                           int *ptra=&a;     char*ptrb=&b;

         那么,ptra指向的空间大小就是一个int的大小,4个字节,ptrb指向的空间大小就是一个char类型的大小,一个

         字节。

(4)指针的内存空间:指针也是一种数据类型,本身自然也有大小,但是不论什么样的指针,在32位下的系统中统

         统都是4个字节。因为32位下的地址都是32位的。

(5)指针本身的地址:指针自己也有自己的地址,通过&取地址符也可以打印出来。

下面是我打印的一些小程序,大家可以copy下来挨个运行下,看看差异:

#include <stdio.h>
#include <stdlib.h>
int fun(int num);
int (*fun1)(int num);//指针函数
void swap(int *a,int *b);
int main()
{
    /*指针遍历数组
    int a[5]={1,2,3,4,5};
    int *aptr=b;
    for(i=0;i<5;i++)
    {
        printf("%d\n",(*aptr));
        (*aptr)++;
        aptr++;
    }
    for(i=0;i<5;i++)
    {
        aptr--;
        printf("after:%d\n",(*aptr));

    }*/
    /*指针遍历char类型数组
    char b[5]={'a','b','c','d','e'};
    int *ptr=b;
    ptr++;
    printf("%c\n",(*ptr));
    */
    /*32位下所有指针都是4个字节
    char *a;
    printf("%d",sizeof(a));
    */

    /*将地址赋给指针,&是取地址符,&也可以将指针的地址取出来
    int a=10;
    int *ptr=&a;
    printf("%d\n",&a);
    printf("%d\n",&(*ptr));
    printf("%d\n",ptr);
    printf("%d\n",&ptr);
    */
    /*双指针
    int a=10;
    int **ptr;
    *ptr=&a;
    **ptr=20;
    printf("%d\n",**ptr);
    */
    /*int 变量刚声明就赋给了空间,但是刚开始是个乱值。
    int a=0;
    printf("%d\n",sizeof(a));
    printf("%d\n",&a);
    */
    /*数组名可以当做指针
    int a[5]={1,2,3,4,5};
    printf("%d\n",*(a+2));
    */
    /*指针和结构体.结构体内的变量不能赋值,结构体可以定义在任何地方,
      但是后面必须有分号
    struct str
    {
        int a;
        int b;
        int c;
    };
    struct str s;
    s.a=100;
    struct str*ptr=&s;
    printf("%d\n",ptr->a);
    */
    /*指针函数
    fun1=fun;
    int a=fun1(5);
   // int a=(*fun1)(5);经过测试也可以
    printf("%d\n",a);
    */
    /*指针自己的地址是不会改变的
    int a[3]={1,2,3};
    int *ptr=a;
    printf("%d\n",ptr);
    printf("%d\n",&ptr);
    ptr++;
    printf("after:%d\n",ptr);//指针指向的地址,增加了4
    printf("after:%d\n",&ptr);//指针的地址,没有改变
    */
    /*指针转换
    float a=13.8;
    //int*pa=&a;不经转换,打印出来是错误的
    //int *pa=(int*)&a;//经过转换也是不行的,指针是不能相互转换的
    printf("%d\n",a);//应当是%f,不然还是乱的数据
    */
    int a=100;
    int b=200;
    int *pa=&a;
    int *pb=&b;
    swap(pa,pb);
    printf("%d   %d\n",*pa,*pb);


    return 0;
}
int fun(int num)
{
    return num;
}
void swap(int *a,int *b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}

C语言中关于指针的数据类型和指针运算的小结

有关指针的数据类型小结 记忆诀窍: 容易混淆的几个int *p[n] 、int (*p)[n],其中int *p[n]是一个数组,数组的元素是指针;int (*p)[n]是个指针,是一个指...
  • xiaoranzhizhu
  • xiaoranzhizhu
  • 2014年09月14日 16:36
  • 788

C语言中的指针(*p p &amp;p)

    在看博客时,无意看到了一篇关于C语言指针的博客议论。虽然写的内容不多,但是自己觉得还是有用,就记下来了。    学习C语言时,指针的学习是比较难的一部分,常常分辨不了*p   p    &p ...
  • rn7ps8bn
  • rn7ps8bn
  • 2009年09月03日 16:53
  • 4062

C语言中的指针-记录个人理解

1、直接使用指针的表达式,表示使用指针代表的内存地址 2、在指针表达式前加上符号:*,表示使用指针指向的值,也就是指针所代表的内存地址中存储的值 3、指针也有数据类型 4、假设int...
  • Listener_ri
  • Listener_ri
  • 2015年06月14日 09:57
  • 2385

C语言中引用及指针和引用的联系与区别

引用:引用是一个变量的另一个名字,又称别名。定义方式: int a=10; int &b=a;在这里,意思就是给a变量起了一个新名字b,因此b不可再次被重新定义。 引用必须初始化,无空引用,并且...
  • wtzdedaima
  • wtzdedaima
  • 2017年10月28日 16:51
  • 108

C语言中指针的几种用法

大家都知道指针是C语言中的精髓,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,...
  • zhl254467014
  • zhl254467014
  • 2015年03月19日 13:42
  • 26625

C语言中指针的高级用法

点击打开链接 问题描述:指针是C语言很有特色的一个部分,但是使用也比较复杂,很容易导致一些莫名的错误,比如有时候函数指针没有赋值,有时指向了未定义的内存,这些时候都可能导致程序异常执行或者崩溃。但指...
  • changyourmind
  • changyourmind
  • 2016年07月14日 17:56
  • 226

C语言中指针的传值和传址

#include #include void Func(char* p) { p = (char*)malloc(50); } void main() { char* cptr = NUL...
  • iFuMI
  • iFuMI
  • 2016年09月18日 19:36
  • 1000

java中基本概念引用及和C语言中指针比较

第一点:什么是引用类型       引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。       在java里面除去基本数据类型的其它类型都...
  • jcsyl_gsc
  • jcsyl_gsc
  • 2015年11月15日 23:17
  • 402

C语言快速讲解(二)指针的用法

前言:作为一个安卓程序员,如果不懂C/C++开发,那么安卓jni、NDK、视频解码、音频解码也没法开发,有需求我们就要学习,加油吧!今天开始我们快速讲解C语言,有Java基础的人适合看本博客。...
  • qq_32306361
  • qq_32306361
  • 2017年06月24日 17:46
  • 247

C语言:行指针和列指针

本文主要介绍C语言二维数组中的行指针及列指针,目的是为了搞清二维数组或更高维数组在作为函数参数进行传递时,考虑到代码的可复用性及软件最小权限原则,如何声明该形式参数。学习笔记,仅供参考,如有错误,敬请...
  • sudazf
  • sudazf
  • 2013年03月11日 23:20
  • 3534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中的指针小结
举报原因:
原因补充:

(最多只允许输入30个字)