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*;
数组与指针的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指针学习小结(参考别人总结的经验)的更多相关文章
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- tcp、http 学习小结
tcp.http 学习小结 前言 最近因为cdn的一个问题,困扰了自己好久.因为需要统计网站访问的成功数,而且要求比较精确.目前的实现不能满足要求,因为没有区别访问成功与否,也没有对超时做处理.期间解 ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- Qt 智能指针学习(7种指针)
Qt 智能指针学习 转载自:http://blog.csdn.net/dbzhang800/article/details/6403285 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ ...
随机推荐
- 操作mysql操作数据库
操作数据库 查询数据库:show databases: 增加数据库:create database student default character set uft-8:(设置默认字符集) 删除数据 ...
- EM_LGH CF965D Single-use Stones 思维_推理
Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1000000 ...
- IOS - 总结(网络状态变更)
- (void)initNetworkMonitor { NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/" ...
- laravel save() 返回 null
原因:引用其他方法时,没有 return save()的操作结果. 在使用save()方法时,发现返回值是:null:
- pytorch 5 classification 分类
import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...
- javaScript 通过flie API读取本地文件
File API是HTML5新增内容,依靠file和FileReader,这两个对象完成,代码如下: var fileInput = document.getElementById('test-ima ...
- NYIST 489 哭泣天使
哭泣天使时间限制:1000 ms | 内存限制:65535 KB难度:5 描述Doctor Who乘着Tardis带着Amy来到了一个星球,一开Tadis大门,发现这个星球上有个壮观的石像群,全是一些 ...
- scrapy研究探索(二)——爬w3school.com.cn
下午被一个问题困扰了好一阵.终于使用还有一种方式解决. 開始教程二.关于Scrapy安装.介绍等请移步至教程(一)(http://blog.csdn.net/u012150179/article/de ...
- 纯文本中识别URI地址并转换成HTML
问题 有一段纯文本text, 欲将其插入DOM节点div中. text中可能有超链接, 邮件地址等. 假设有, 识别之. 分析 假设仅仅是纯文本, 插入div中, 仅仅要将div.innerText设 ...
- 使用malloc分别分配2KB的空间,然后用realloc调整为6KB的内存空间,打印指针地址
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> i ...