黑马程序员——C语言基础---指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、 指针变量的定义

1. 定义的格式

l 类名标识符  *指针变量名;

l int *p;

2. 先定义后赋值

l 简单取值

int a = 10;

int *p;

p = &a;

printf(“%d”, *p);

l 简单改值

*p = 9;

3. 定义的同时赋值

int a = 10;

int *p = &a;

4. 实现修改实参

5. 注意点

l int *p;   p = 1000;

l int *p;   *p = 100;

l int *p;  *p = &a;

l %p输出指针里面存储的地址值

l 其他指针类型说明,比如float *p;  char *p;

l 不能乱用类型,比如int a = 10;  float *p = &a;

6. 清空指针

l p = 0;

l p = NULL;

二、 指针与数组

1. 指向一维数组元素的指针

2. 用指针遍历一维数组元素

l 先遍历char数组(‘i’,’t’),再遍历int类型数组

l *(p+i)和*(p++)的区别

l a+i和a++

l p[0]、p[1]

三、 指针与字符串

1. 字符串回顾

char s[] = “jake”;

2. 其他定义字符串的方式

char *s = “jake”;

或者

char *s;

s = “jake”;

3. 两种定义方式的区别

l 内存分析

l 画图分析

l 常量和变量字符串的区别

l 常量的内存地址查看

四、 返回指针的函数

l 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的

l 返回指针的函数的一般形式为:类型名 * 函数名(参数列表)

五、 指向函数的指针

1. 为什么指针可以指向一个函数?

函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

2. 指向函数的指针的定义

定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);

3. 使用注意

l 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的

l 指向函数的指针变量主要有两个用途:

·  调用函数

·  将函数作为参数在函数间传递

时间: 2024-12-26 05:41:52

黑马程序员——C语言基础---指针的相关文章

黑马程序员---C语言基础---指针

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ C语言基础---指针 学习C语言,指针是必须重视的,本人觉得,正是因为指针才使得C语言如此的强大与妙不可言(当然还有其丰富的数据类型与运算符). 指针的作用,说的大白话一点就是:有了指针,就能找到你. 就好比全球定位系统,只要你在地球上,把精确的地址给我,我就能定位到你. 那么什么是指针变量呢?就是存放地址值的变量,该变量只能存放内存地址值,定义如下: 类型标识符   *指针变量名; 先看

黑马程序员-C语言基础:指针类型与指针和数组、字符串的关系

//指针变量就是用来存储地址的,只能存储地址 格式:  int  *p;  这个p为指针变量:指针变量占8个字节 类型是用来说明这个指针指向的类型: 比如上边的int代表这个指针变量会指向int类型的存储空间: int *p = &a;//这样一句可以写,此时的*只是一个标志,表示这个*只是表示p是个指针: *p = &a;//这样写就错了:此时*p表示取p指向的空间的值: 指针疑问:指针既然都占据8个字节,那么为什么要划分类型, 是因为当用*p指针取值或者赋值的时候,知道该取几个字节,比

黑马程序员-c语言基础:各种数据类型的输出占位符

c语言中的输出操作相对java来说是比较麻烦的,每种数据类型的输出都有各自的占位符: 下面是各种数据类型的输出占位符: short/int : %d int a = 1; printf("这个整数是:%d", a); long: %ld; (long 是int得修饰,不能算是一种单独的数据类型,只是比int多了四个字节的存储空间) long long: %lld char : %c float/double : %f  float默认是6位小数输出:可以在%f中控制:例如:%.2f:输

黑马程序员-C语言基础:数组和字符串

数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4]=13};//这种写法也可以,直接给其中角标为3和4的赋值 int args[] = {12,23,32};//中括号中没写数组大小,在大括号中一定要写具体数值 int args['A'] = {2,34,5}; 错误写法: int args[];//这样编译器不知道给你开辟多大的内存空间 int

黑马程序员_01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)

------- android培训.java培训.期待与您交流! ---------- Java语言主要由5中符号组成 标识符:数字.字母.美元符.下划线(注意不能数字开头) 关键字:goto和const保留了它们,但是Java没有使用. 运算符:注意运算符优先级(左结合和右结合要注意) 分隔符:注意+号可以分割字符串. 注释:三种注释. 数据类型与变量 常量: 整型 浮点型 字符:注意后面跟三个八进制(\ddd)和 四位unicode码(\u8bf7) (不区分大小写) 字符串 布尔型 变量:

黑马程序员---C语言基础---结构体

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ C语言基础---结构体 一.什么是结构体 介绍结构体之前,我想先简单介绍下数组.我想大家对数组都再熟悉不过了,顾名思义,数组就是将一些数据(元素)组合在一起,作为一个整体.使用数组需要注意的是这些元素必须是相同类型.而结构体和数组类似,也是将一些数据组合在一起作为一个整体,但是这些元素可以是不同类型.可以这么理解:结构体是更加灵活的数组,因为它允许元素是不同的类型. 实际生活中,如果我们要

黑马程序员——c语言基础语法(二)

指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值.未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误.在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址. 两个有关的运算符: &:取地址运算符. *:指针运算符(或称“间接访问” 运算符). C语言中提供了地址运算符&来表示变量的地址.其一般形式为:&变量名: 如&a表示变量a的地址,&b表示

黑马程序员— C语言基础之内存剖析

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 在学习C语言基础知识时,老师对内存的分析很重视,几乎每个知识点都会帮我们分析内存存储情况,透过内存的分析也让我们对C语言有了更深的一些了解,C语言跟其他计算机语言相比,对内存的分析和要求更高,下面我们一起来了解和学习一下C语言的内存剖析,是我个人的在学习中的一些总结,如果问题或者不到位的地方也希望大家能够一起交流和指正. 第一讲  进制 进制是一种计数的方式,数值的表示形式,一般我们C语言主要

黑马程序员——C语言——基础语法

首先学的是C语言的基础语法,主要分为关键字.标示符.注释.数据.常量.变量. 一.关键字 1   关键字是指在C语言中系统默认的有特殊意义的字符 2   关键字全部是小写字母表示,总共32个关键字(主函数[main]中int .return),如下: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned