指针学习与总结
一、
1.int *p :p与*先结合,说明p是一个指针,然后与int结合说明指向的是一个int型的。
2.int p[3] :p与[]结合说明p是一个数组,然后与int结合,说明数组里的元素是int型的。
3.int *p[3]: p与[]结合说明p是一个数组,后与*结合,说明数组的指针,后与int型结合,说明指针指向的是int型的。
4.int (*p)[3] :p与*结合,说明p是一个指针,后与[]结合说明指向的是一个数组,与int结合说明数组的元素是int型。
5.int **p :p与*结合,说明p一个指针,指向的类型是int *,与*再结合说明*p是一个指针,再与int结合,说明*p指向的是int型。
6.int p() :p与()结合,说明p是一个函数,再也int结合说明返回值是int型。
7.int(*p)(int) :p与*结合说明p是一个指针,与()结合,说明指向的是一个函数,再与int结合说明返回值是int型。
8.int *(*p(int))[3]: p与()结合,说明p是一个函数,与*结合说明返回值是一个指针,指向的类型是int* [3],再与[]结合,说明指向的是一个数组,再与*结合,说明数组里存放的是一个指针,再与int结合,说明
数组的指针指向元素是int型的。
二、
指针的类型,指针指向的类型,指针的值或者指针所指向的内存区,指针本身所占据的内存区
指针的类型:去掉指针名即是。int *ptr 指针的类型是int*;

    数组与指针的typedef:考虑typedef是类型的重命名,注意是类型不是指向的类型,对指针类型重命名typedef char* PCHAR;//PCHAR是char * 的别名。
    typedef char ARRAY[10];//ARRAY的类型是char [10], ARRAY a;//定义char a[10]
    函数的typedef:typedef int (*PFUN)(int a);//PFUN是一个函数指针
    int printa(int a){printf("a = [%d]",a);}
    PFUN pf ;
    pf = &printa;
    (*pf)(1);

指针指向的类型:去掉指针名和左面的*即可,int **ptr 指向的类型是int*;
指针的值或者指针所指向的内存区:在32位机器中, 所有类型的指针的值都是一个32位的整数,指针所指向的内存区就是从指针所代表的的那个地址开始,长度为sizeof(指针指向的类型)的一片内存区。

三、指针的运算
char a[20];
int *p = (int*)a;
p++;//这里p++之后,p指向下一个int,一般32位机器,即指向了a[4],即p加上了sizeof(int)
测试代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

char a[34] = "abcdefg1234567890";
int i ;
int *p = (int *)a;
p++;
for(i=0;i<5;i++)
{
printf("%d\n",&a[i]);
}
printf("========%d\n",p);
}

code 2 to understand:
int main(){

char a[34] = "abcdefghij1234567890";
char *p = a;
char **pp = &p;

//强制理解,把指针看作一个变量,存放的是地址
printf("%d\n",p);//1
printf("%d\n",a);//同1
printf("%d\n",pp);//2
printf("%d\n",&p);//同2
printf("%d\n",*pp);//同1 pp->p ->a则pp = &p, p = a; *pp = p

printf("%c\n",**pp);
printf("%c\n",*p);

}

understand 3:
int a = 12; int b ; int *p ; int **pp;
p = &a;
*p = a;
pp = &p;
*pp = &b;
**pp = a;
四、数组与指针
int a[10] = {1,2,3,4,5,6,7,8,9,0};
*a //*(a+0) 1
*(a+2) // 3
五、指针与函数的关系
int f(){
printf("this is f.\n");
return 1;}
int main()
{
int (*pf)();
pf = &f;//pf = f也可以? 函数f内存中直接是地址?
pf();
}
六、指针的类型转换

int a = 10;
int b;
char *str;
int *ptr;
ptr = &a; // ptr -> a ,ptr存a的地址
printf("%d\n",ptr);
printf("%d\n",&a);
b = (int)ptr;
printf("%d\n",b);
str = (char *)b;str -> b,由于b是int,str是字符串,所以要进行强制转换
printf("%d\n",str);
ptr =(int *)&c;
printf("%d\n",ptr);
printf("%d\n",&c);

/**************************
别人的建议数据结构吧,算法才
是永恒的,程序设计语言层出不穷,永远学不完。学完之后就认真啃
下STL这根骨头吧,推荐书籍--------范型编程与STL和STL源码剖析。
**************************/

c指针学习小结(参考别人总结的经验)的更多相关文章

  1. dubbo学习小结

    dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...

  2. pthread多线程编程的学习小结

    pthread多线程编程的学习小结  pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写     程序员必上的开发者服务平台 —— DevSt ...

  3. clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  4. tcp、http 学习小结

    tcp.http 学习小结 前言 最近因为cdn的一个问题,困扰了自己好久.因为需要统计网站访问的成功数,而且要求比较精确.目前的实现不能满足要求,因为没有区别访问成功与否,也没有对超时做处理.期间解 ...

  5. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  6. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  7. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  8. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  9. Qt 智能指针学习(7种指针)

    Qt 智能指针学习 转载自:http://blog.csdn.net/dbzhang800/article/details/6403285 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ ...

随机推荐

  1. layui动态修改select的选中项

    layui动态修改select的选中项:(在layUI下给select设置默认选项) 例: $("select[name='result']").val(11); //重新渲染表单 ...

  2. vertical-align到底是个啥

    https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align http://phrogz.net/css/vertical-align ...

  3. HTML特殊符号对照表、常用的字符实体

    来源:http://tool.xker.com/htmlchar.php 最常用的字符实体 显示结果 描述 实体名称 实体编号   空格     < 小于号 < < > 大于号 ...

  4. GRUB 引导流程

    GRUB(bootloader)引导流程:  GRUB,GRand Unified Bootlader ,是一个来自GUN项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在计算机内 ...

  5. Python-基础-day6

    1.二进制 前言:计算机一共就能做两件事:计算和通信 2.字符编码 生活中的数字要想让计算机理解就必须转换成二进制.十进制到二进制的转换只能解决计算机理解数字的问题,那么文字要怎么让计算机理解呢? 于 ...

  6. thinkPHP的Excel插件

    原文地址 http://www.thinkphp.cn/topic/14005.html 总结的注意事项 1实例化第三方类,要在类名前加\ ,不然引用地址不对. 实现步骤:一:在http://phpe ...

  7. a.WHERE使用中单行子查询(适用于>,<,=,>=,<=等条件)

    a.单行子查询(适用于>,<,=,>=,<=等条件)    //查询工资最高的员工编号和员工名   select empno,ename   from emp   where ...

  8. ubuntu设置PATH

    试了好多遍,多无效.. 最后在/etc/enviroment下设置才有效. 不过让有一些未解问题 我使用sudo su 进入到root用户权限,设置完成的. 重新使用sudo -s进入root用户权限 ...

  9. HDU 4312 Contest 2

    题目要求两点间的最大值作为距离即: 即是切比雪夫距离.而切比雪夫距离与曼哈顿距离的转换却很巧妙. 把平面坐标所有点绕原点逆向旋转45度后,所得点的曼哈顿距离之和除以√2,即是切雪比夫距离.旋转点的公式 ...

  10. POJ 2183

    模拟题 #include <iostream> #include <cstdio> #include <algorithm> using namespace std ...