指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。
l void change(int n)函数调用完毕后,改变实参的值
l 分析:修改实参的值->找到存储空间->地址
l 类名标识符 *指针变量名;
l int *p;
l 简单取值
int a = 10;
int *p;
p = &a;
printf(“%d”, *p);
l 简单改值
*p = 9;
int a = 10;
int *p = &a;
l p = 0;
l p = NULL;
变量类型 变量名;
格式:变量类型 *变量名;
定义了一个指针变量p
指针变量只能存储地址
指针就一个作用:能够根据一个地址值,访问对应的存储空间
指针变量p前面的int:指针变量p只能指向int类型的数据
#include <stdio.h> void swap(int *v1, int *v2); int main() { /* int a = 10; int b = 11; swap(&a, &b); */ int a2 = 90; int b2 = 89; swap(&a2, &b2); printf("a2=%d, b2=%d\n", a2, b2); return 0; } /* 不能交换外面实参的值,仅仅是交换了内部指针的指向 void swap(int *v1, int *v2) { int *temp; temp = v1; v1 = v2; v2 = temp; }*/ // 完成两个整型变量值的互换 void swap(int *v1, int *v2) { int temp = *v1; *v1 = *v2; *v2 = temp; } /* 交换的只是内部v1、v2的值 void swap(int v1, int v2) { int temp = v1; v1 = v2; v2 = temp; }*/
2.int sumAndMinus(int a, int b, int *minus)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
#include <stdio.h> int sumAndMinus( int
n1, int
n2, int
*n3); int main() { int
a = 10; int
b = 7; // 存储和 int
he; // 存储差 int
cha; c he = sumAndMinus(a, b, &cha); printf ( "和是%d, 差是%d\n" , he, cha); return
0; } // 返回值是 int
sumAndMinus( int
n1, int
n2, int
*n3) { *n3 = n1 - n2; return
n1 + n2; } |
int i = 2;
char c = 1;
int *p = &c;
printf(“%d”, *p);
l 先遍历char数组(‘i’,’t’),再遍历int类型数组
l *(p+i)和*(p++)的区别
l a+i和a++
l p[0]、p[1]
char s[] = “mj”;
char *s = “mj”;
或者
char *s;
s = “mj”;
l 内存分析
l 画图分析
l 常量和变量字符串的区别
l 常量的内存地址查看
1> 编写一个int string_len(char *s),返回字符串s的字符长度
l 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的
l 返回指针的函数的一般形式为:类型名 * 函数名(参数列表)
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);
l 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的
l 指向函数的指针变量主要有两个用途:
1.常量区
存放一些常量字符串
2.堆
对象
3.栈
存放局部变量
掌握:
定义字符串的2种方式
1> 利用数组
char name[] = "whb";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "whb";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
原文:http://www.cnblogs.com/lszwhb/p/3661609.html