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 声明一 ...
随机推荐
- InnoDB INFORMATION_SCHEMA Buffer Pool Tables
InnoDB INFORMATION_SCHEMA Buffer Pool Tables InnoDB INFORMATION_SCHEMA缓冲池表提供有关InnoDB缓冲池中页面的缓冲池状态信息和元 ...
- python:零散记录
1.rstrip()删除末尾指定字符串 例如:A = '1,2,3,4,5,' B = A.rstrip(',') B = '1,2,3,4,5' 2.isdigit()方法 Python isdig ...
- 第十三章:MFC库与Windows程序开发概述
主要内容: 1.Windows程序的基本结构 2.MFC库简介 3.使用Visual C++开发Windows程序 具体内容略
- 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的42-45讲 {字典}
#coding=gbk#嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av15123607/?from=search&seid=1021108 ...
- Struts2的线程安全性
[什么是线程安全性?] 在多线程并发访问的情况下,如果一个对象中的变量的值不会随访问的线程而变化则是线程安全的.反之则称为非线程安全的. [Servlet是线程安全的吗?] [非线程安全的] publ ...
- java基础之switch
switch 语句由一个控制表达式和多个case标签组成. switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). swi ...
- python018 Python3 输入和输出
Python3 输入和输出在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能.本章节我们将具体介绍 Python 的输入输出. 输出格式美化Python两种输出值的方式: 表达式语句 ...
- 1284-Primitive Roots,学信安的路过
Primitive Roots 此题通过率如此之高,料想不会很难,但是再简单小菜还是不会.. 嗯,下 ...
- Codeforces474E - Pillars
Portal Description 给出一个\(n(n\leq10^5)\)的正整数序列\(\{a_n\}(a_i\leq10^{15})\)和正整数\(d(d\leq10^9)\),求\(\{a_ ...
- 为docker容器设置独立ip
docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...