c语言学习-指针探究
1:指针定义格式:
格式:变量类型 *变量名用途:指针变量用于储存地址(only),也就是根据地址值,访问对应的存储空间。
注意。int *p 只能指向int类型的数据;
例:
int a = 20;
int *p;
p = &a;
//既p代表地址,*p代表值
//这时的* 代表指针变量p指向的存储空间,目的:改变p代表的地址指向的空间。
任何指针类型,都是占用8字节的存储空间。
指针的长度,是要根据指向的数据的地址,来取多少长度的数据,所以为防止取错数据需要和指向数据的类型一致。
注意:指针+1:p+1-->调到下一个地址,并非数学意义上的+1 具体取决于定义的类型,如: int:+4,char:+1,double:+8;
指针数组:
int age[5]
int *p;
p = age;
数组赋给指针,可指针也具有数组的特性
p[i],
下面的上下情况一样的,
void change(int *array){ }
void changge(int array[]){ }
利用指针接收一个数组,指针变量arry指向数组的首元素。
3:指针与字符串
char name[] = "it"; char *name2 = "it"; //name2指向字符串的首字符,
由于其是char类型的数据,则只能指向第一个char类型。 printf("%c\n",*name2);
-->i
指针name2就是代表了字符串的首字符
printf("%s\n",name2);
-->it
而输出格式%s代表着,他会一致从第一个地址开始输出,知道遇到\0结束。
知道了指针的基本用法后,定义字符串的就有两种方式:
char name[] = "it";
char *name2 = "it";
name[1]='A';-->OK
*name='A',-->出错。
原因:指针定义的字符串,不可更改,
区别:数组:字符串变量(可更改)
指针:字符串常量(不可更改)
char *n1="it";
char *n2="it";
printf("%p\n%p\n",n1,n2);//查看%p查看地址
二者的结果是一样的。指向同一个地址
**指针数组与指针字符串的区别
char name[]="itcast";
特点:在变量区,内容可以更改
使用场合:字符串的内存需要经常修改
指针字符串
char *name="itcast";
特点:这个字符串其实是常量字符串(在内存的常量区),里面的字符是不可更改。
使用场合,字符串的内存需要不需要修改,而且是经常用到。
3:指针数组
char *name[5]={"jack","rose","jael"};
等价与二维字符串数组(字符串数组)
char name[3][5]={"jack","rose","jael"};
4:指向函数的指针
指针用来指向地址,而函数也有地址,指针也可以用来指
我们知道数组名,代表数组的地址 ,同样,函数名代表函数地址。
//无返回值,无参
void test(){ }
//带返回值
int sum(int a,int b){
return a+b;
}
//带返回值,同事参数也有指针格式
double min(double a,char *s,int a){} int main(){ //1,使用void
//(*p):固定格式
//左边的void:指针变量p指向的函数没有返回值
//右边的():代表p指向的函数没有形参 void (*p)(); p = test;//指针变量p指向test (*p)()://调用test函数,
或者p(); //2,带返回值int类型
int (*p)(int a,int b)//int (*p)(int,int)
p = sum;
int c = p(4,5); return 0;
} //3,double格式
double (*p)(double,char *,int);
p=min;
//或者
double (*p)(double,char *,int)=min;
作者:Darren
微博:@IT_攻城师
github:@Darren90
出处:http://www.cnblogs.com/fengtengfei/
c语言学习-指针探究的更多相关文章
- go语言学习--指针的理解
Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, fu ...
- go语言学习--指针数组和数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的 ...
- Go语言学习——指针、new和make
指针 Go语言中不存在指针操作,只需要记住两个符号: &:取地址 *:根据地址取值 vscode 打开多个标签页 settings.json中输入"workbench.editor. ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- GO语言学习(十五)Go 语言指针
Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
"指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...
- 12天学好C语言——记录我的C语言学习之路(Day 9)
12天学好C语言--记录我的C语言学习之路 Day 9: 函数部分告一段落,但是我们并不是把函数完全放下,因为函数无处不在,我们今后的程序仍然会大量运用到函数 //转入指针部分的学习,了解指针是什么 ...
- C语言学习 第七次作业总结
C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...
随机推荐
- 约束RMQ
不知道为什么网上找不到太多相关的资料,所以写一个小总结,并附有能用的代码,抛砖引玉. 约束RMQ,就是RMQ区间必须满足两项之差最大为1,采用ST表的话,这时候有O(n)建表,O(1)查询的优秀复杂度 ...
- Thinkphp框架图片上传实例
https://www.cnblogs.com/wupeiky/p/5802191.html [原文转载自:https://www.cnblogs.com/guoyachao/p/628286 ...
- 【CodeForces 426】div1 B The Bakery
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...
- 激活windows10(已更新工具)
激活windows10 1.用cmd命令: 自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H ...
- 单链表 C语言 学习记录
概念 链接方式存储 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的). 链表中 ...
- python3--算法基础:二维数组转90度
python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...
- POJ-2386Lake Counting,搜索题。。
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Description Due to recent rains, w ...
- 两个很实用很方便的函数核心及用法{(lower_bound)+(max_element))~~
(1) 关于 lower_bound(a,a+n,x)-a的用法: 求x在数组a中的 ...
- BZOJ1744: [Usaco2005 oct]Skiing 奶牛滑雪
n<=100 * m<=100的地图,每个数绝对值不超过25,从1,1到n,m,一开始速度v,从数字A走到数字B速度会变成v*2^(A-B),求到终点最短时间. 可以发现,相同的数字出发的 ...
- Visual Studio 2017 RC的坑
ASP.NET Core Project add Docker Project Support的问题 执行上面操作以后,如果本机没有装好docker,就会一直报错,无法build通过,无论你在Proj ...