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 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ ...
随机推荐
- Java基础——Servlet
什么是Servlet Servlet是Java Web的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l ...
- Python测试(二)
# 1.计算1-300之间所有能被3和7整除的所有数之和# num = 0# for i in range(1,300):# if i%3 ==0 and i%7 ==0:# num += i# pr ...
- 安装node-sass及报错后解决方案
使用npm install 命令安装node-sass时,经常出现安装失败的情况.原因在于npm服务器在美国,还有就是某强大的防火墙作用.导致模块无法下载. 1 npm install node-sa ...
- laravel 知识点总结
1.eloquent 关系理解: https://lvwenhan.com/laravel/423.html
- UVA10082-WERTYU(紫书例题3.2)
A common typing error is to place the hands on the keyboard one row to the right of the correct posi ...
- js如何实现php的in_array()
var arr = [ 4, "Pete", 8, "John" ]; jQuery.inArray("John", arr); //3 j ...
- 洛谷 P2559 [AHOI2002]哈利·波特与魔法石
P2559 [AHOI2002]哈利·波特与魔法石 题目描述 输入输出格式 输入格式: 文件中第一行有七个数,分别是 S1. S2 . …. S7 :第二行有两个数,依次分别是起点城市 i 和终点城市 ...
- HDU 4311 Contest 2
求的是曼哈顿距离.可以把X,Y的距离分开来求.其中,求X.Y的距离可以通过排序后递推的方式求出值的. #include <iostream> #include <algorithm& ...
- CURL库的宏定义列表
列表CURL库一共同拥有17个函数 curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同一时候3复制其全部參数 curl_errno:返回最后一个错误 ...
- JSP简单练习-上传文件
注意:在编写上传文件的代码时,需确保"WEB-INF/lib"下含有jspsmartupload.jar包.否则会出错. jspSmartupload.jar下载 <!-- ...