c指针学习小结(参考别人总结的经验)

指针学习与总结
一、
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*;
指针指向的类型:去掉指针名和左面的*即可,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源码剖析。
**************************/

时间: 2024-08-07 21:19:34

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

pthread多线程编程的学习小结

pthread多线程编程的学习小结 程序员必上的开发者服务平台 —— DevStore pthread多线程编程整理 1 Introduction 不用介绍了吧… 2 Thread Concepts 1.     Thread由下面部分组成: a.     Thread ID b.     Stack c.     Policy d.     Signal mask e.     Errno f.      Thread-Specific Data 3 Thread Identification

MogileFS学习小结

大纲: 一.关于MogileFS 二.常见分布式文件系统 三.MogileFS基本原理 四.MogileFS的实现 一.关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化.在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集.数据存储.数据搜索.数据共享.数据传输.数据分析.数据可视化等一系列问题. 传统存储在面对海量数据存储表现出的力不从

8086汇编学习小结———实时更新

初学IBM-PC 8086,对INT指令不是很理解.现从网上总计如下: 表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04 异步通迅输出 DL=输出数据 05 打印机输出 DL=输出字符 06 直接控制台I/O DL=FF(输入)DL=字符(输出) AL=输入字符 07 键盘输入(无回显) AL=输入字符 08 键盘

c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

javascript 学习小结 (二) by FungLeo

javascript 学习小结 (二) by FungLeo 前言 前面写过一个学习小结javascript 学习小结 JS装逼技巧(一) by FungLeo 那篇博文总结的东西还是比较多的. 但是JS有很多的内容,都是很有用的知识点,不可能一下子记住.因此,我的学习小结的会一直更新. 因为学习进度的不同,可能每篇博文的长短也不一样,有的学的东西多,就长点. 查询某个字符串在某个数组中的索引值 笨方法 我的基础比较差,所以很多东西是记不住的.因此,我在需要这样做的时候,我写了如下代码 var

2014.8.12-AKKA和Actor model 分布式开发环境学习小结

学习使用AKKA 断断续续有一年了.目前还是习惯用java来写akka下面的程序.对于原生的scala还是没有时间和兴趣去学习它. 毕竟学习一门语言需要兴趣和时间的. AKKA学习资源还是不算丰富. 看过最多的就是官方的编程手册,还有就是AKKA Essentials 这两本.  自己动手写的程序还不算多,也放在github上面. 另外,在akka编译配置.升级版本上,以及部署多台服务器组建akka cluster 方面花费了不少时间.因为项目需要,上周重新在办公室用两台mac台式机和一台thi

javascript 学习小结 JS装逼技巧(一) by FungLeo

javascript 学习小结 JS装逼技巧(一) by FungLeo 前言 最近一直在做javascript方面的工作.但是本身我的javascript水平比较低,因此在学习过程中比较困难.而最近又接触到了很多的知识点.好记性不如烂笔头,因此写这篇零碎的博文,记一记我学到的一些好玩的东西. 简单的新建各种元素 创建各种元素都有相对应的方法,例如,创建一个数组可以这样写var arr = new Array 当然,这样做是对的,但是我英文很烂,并且不喜欢这样的代码.我喜欢的是下面这样的. //

Linux常用shell命令(学习小结)

1. man 对你熟悉或不熟悉的命令提供帮助解释 eg:man ls 就可以查看ls相关的用法 注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行. 2. ls 查看目录或者文件的属性,列举出任一目录下面的文件 eg: ls /usr/man ls -l a.d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link) b.表示文件或者目录许可权限.分别用可读(r),可写(w),可运行(x). 3. cp 拷贝文

varnish学习小结

大纲 一.Varnish 简介 二.Varnish 特点 三.Varnish 与 Squid 对比 四.Varnish 设计结构 五.Varnish 工作流程 六.Varnish 状态引擎(state engine) 七.安装与配置 Varnish 一.Varnish 简介 Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. Varnish 的作者Poul-Henning Kamp是F