C语言笔记系列(六)--指针
2016-07-19 12:48
423 查看
1. 概念
指针的值是地址,大多系统内部由无符号整数表示,但它是一种新的数据类型,不是整数类型。2. %p
int n=20; printf("%d %p",n,&n);//分别输出值和地址
3. 数组和指针
表达式一维数组:a[i] , *(a+i) , 指针时才可用a++
二维数组:a[i][j] ,( (a+i)+j)
带数组参量的函数
函数处理数组时必须知道数组的地址和元素个数。
//四种声明等价 int sum(int *a,int n); int sum(int *, int ); int sum(int a[],int n); int sum(int [],int ); //定义只有两种,名称不可省略 //变长数组允许动态分配存储单元 //二维变长数组,两种声明等价 int sum(int r,int c,int a[r][c]); int sum(int ,int int a[*][*]);
数组地址、内容和指针关系
几种比较混淆的数组和指针
int *p; //p是指向int值得指针 int *pp[2]; //pp是数组,由两个指针组成的数组,指针是指向int值,可以用它来定义不规则数组。 int(*pa)[2]; //pa是指针,是指向两个int值数组的指针 int **p2; //p2是指针,指向指针的指针 //a1表示第一行数组的地址,a1[0]表示第一行第一个元素的地址; //a1+1表示第二行数组的地址,a1[0]+1表示第一行第二个元素的地址; int a1[3][2];
pp[0] =p = &a1[0][0]; pp[1] =p = a1[0]; int a2[2][3]; pa = a1; //pa = a2是错误的 p2 =&p; p2 =&a1[0];
字符串
char s[] = "I love"; char *p = "I love"; //主要区别是s是个常量,p是个变量,只有指针可以使用自增运算符,其他使用差不多。
4. const和指针
当设计意图是函数不改变数组的内容,则可以给函数声明和定义时的形式参量使用const。这只是说明函数在处理时应把数组当做固定不变的,他并不要求原始数组固定不变。
const指针不能赋给非const指针,但非const指针允许赋给const指针,前提是只能有一层间接运算。
只有非const数据的地址才可以赋给普通指针。
只可以修改数据的指针
int *const p = a; //a是数组 p = 1; //允许 p = &a[1]; //错误,只可改数据不可改地址
不可改数据也不可改地址的指针,简称const指针
const int *p = a; //上面两种都不允许使用
5. 结构指针
struct{ int code; float f; }item, *p; p = &item; // p->f, (*p).f, item.f
6. 函数和指针
void toUp(char *); void *toLow(); //指针函数,是返回某一类型指针的函数 void (*p)(char *); //函数指针,是只能指向接受char*参数返回为void函数的指针 p = toUp; //toUp是函数toUp()的地址 (*p)("aa"); p("aa");
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C和指针小结(推荐)
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总