11-C语言指针

一、 指针前奏

1. 指针的重要性

指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。

2. 小需求

l void change(int  n)函数调用完毕后,改变实参的值

l 分析:修改实参的值->找到存储空间->地址

二、 指针变量的定义

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. void swap(char *a, char *b)  (注意temp=a;  a = b; b = temp;)

2. int sumAndMinus(int a, int b, int *minus)

四、 指针探究

1. 指针变量所占用的存储空间

2. 为何指针变量要分类型?

int i = 2;

char c = 1;

int *p = &c;

printf(“%d”, *p);

五、 指针与数组

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

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

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

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

l a+i和a++

l p[0]、p[1]

3. 习题

1> 设计一个函数:int arraySum(int a[], int n),求一维数组a前n个数的和。现在利用int *p替换int a[]

六、 指针与字符串

1. 字符串回顾

char s[] = “mj”;

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

char *s = “mj”;

或者

char *s;

s = “mj”;

3. 两种定义方式的区别

l 内存分析

l 画图分析

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

l 常量的内存地址查看

4. 习题

1> 编写一个int string_len(char *s),返回字符串s的字符长度

七、 返回指针的函数

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

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

八、 指向函数的指针

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

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

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

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

3. 使用注意

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

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

·  调用函数

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

时间: 2024-10-09 02:34:45

11-C语言指针的相关文章

51系列小型操作系统精髓 简单实现11 C语言版优化后说明(有图)

/* CRTOS 实时可剥夺型内核 1.任务不用预加载,不用预定义.任务调用时加载,可删除(退出死循环即可) 2.单位轮转查询时间由晶振和定时器初始化决定.在这里为10ms 3.定时时间为[ time*单位轮转查询时间 ] ,其中time为 rtos_wait(time)中time. 4.可运行多个任务[自定义] 5.任务从rtos_wait()处切换,在定时时间到后从定时中断中切换回来,任务执行后,回到中断,再从中断回到主程序. */ #include "STC12C5A.H" #d

彻底搞定C语言指针详解

1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ---------------------------

11.C语言泛型的支持

1.C语言泛型实现 在前面我所编写的JWArray和JWList都是只能写定一种类型,那么为了在实际中使用方便,很自然想到类似C++中的泛型支持功能,C++中使用模板技术来实现泛型,但是在C中是不支持模板技术的,怎么来实现泛型呢? 如果你了解一点C++的模板技术的话,就知道其实这里的C++模板技术最简单的实现就是编译器对每一种类型都实现一次,然后调用的时候链接到不同类型的实现.那么既然这里C语言编译器本身不支持模板技术,那么我们就用手工来实现每一种类型的函数,然后在实际调用的时候直接链接到对应类

不可或缺 Windows Native (7) - C 语言: 指针

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #ifndef _MYHEAD_POINTER_ #define _MYHEAD_POINTER_ #ifdef __cplusplus extern "C" #endif char *demo_cPointer(); #endif cPointer.c /* * 指针 */ #include "pch.h" #include "c

C语言指针减法问题

今天同学问了我一个指针减法的问题,原来没细想过,记录下相关体会,感谢这位同学 源代码如下: 1 #include<stdio.h> 2 3 int main() 4 { 5 6 int a[]={0,1}; 7 int *p,*q; 8 9 10 p=&a[0]; 11 q=&a[1]; 12 13 printf("%x %x\n\n",p,q); 14 15 printf("%x\n\n",q-p); 16 17 return 0; 1

C语言指针基础

C语言指针 前导程序   1 #include<stdio.h> 2 3 4 5 void change(int *); 6 7 int main() 8 9 { 10 11 int a=90; 12 13 change(&a); 14 15 printf("a=%d\n",a); 16 17 return 0; 18 19 } 20 21 22 23 void change(int *n) 24 25 { 26 27 *n=10; 28 29 } 30 31 一.

C语言指针【转】

一.C语言指针的概念 在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问这些内存单元,必须为每个内存单元编上号.根据一个内存单元的编号即可准确地找到该内存单元.内存单元的编号也叫做地址.既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针. 内存单元的指针和内存单元的内容是两个不同的概念. 可以用一个通俗的例子来说明它

C语言指针

C语言指针 指针是什么? 指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元.我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等).通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系 /* ============================================================================ Name C语言指针 : text.c Author : Version : C

C语言--指针(一)

#import <Foundation/Foundation.h> //交换函数 void swap(int x, int y) { printf("x=%d,y=%d",x,y); int temp = 0; temp = x; x = y; y = temp; printf("x=%d,y=%d",x,y); } // void swap2(int *x , int *y) { //不改地址,改地址对应的值 printf("x=%d,y=%

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占