指针的学习
来源:互联网 发布:土豆pc客户端mac版 编辑:程序博客网 时间:2024/06/01 08:07
1,基本类型
char *pc, pc+offset <=> pc + sizeof(char)*offset
int *pi, pi+offset <=> pi + sizeof(int)*offset
float *pf, pf+offset <=> pf + sizeof(float)*offset
double *pd, pd+offset <=> pd + sizeof(double)*offset
2,自定义类型
struct my_struct { }; my_struct* ps, ps+offset <=> ps + sizeof(my_struct)*offset
3,指向指针的指针
int i=5;
int *pi = &i;
int **ppi = π
[**ppi == *pi == i]
4,指向数组的指针:编译器需要知道指向的数组的长度
int array[5] = {1,2,3,4,5};
int *pi = array; //pi为指向整数的指针,指向数组第一个元素 pi == &array[0];
pi+1 = &array[1]; //pi + 1 实际移动一个整数,四个字节
int (*pa)[5] = &array; //pa 为指向数组的指针, int(*pa)[5]为指向5个元素数组的指针类型,编译器知道数组的大小为5.
pa + 1 越界操作。
int mat[2][5] = {1,2,3,4,5, 6,7,8,9,10}; //两个5元数组
int (*pa)[5] = &mat[0]; // pa指向了mat中的第一个5元组
assert( **(pa+1)==6 ); // pa+1指向了mat的第二个5元组。
add - 2011/3/17
指向数组的指针定义:
typedef int pInt5Type[5]; //通过typedef定义了一个类型: pInt5Type,指向五个整型元素数组的指针。
int array[5] = {1,2,3,4,5};
pInt5Type pA = &array;// 错误,
纠正 - RYF 2011/5/26:
理解数组和指针-2011/5/26
C++是基于范式(Paradigm)/模式(Pattern),泛型编程就是提取、提升出特定的范式或者模式,独立于类型,最终以统一的模板形式实现,模板又是支持特化的,模板从技术角度阐释了共性和特性。模式和范式一直停留在理论层面。。扯远了~ 我主要想说一下数组和指针,这个永恒的话题,数组到底怎么理解,我从范式角度做个比较、分析:
针对特定类型的分析,最熟悉的int:
double d_a(5.0);//任何型别不论内建还是自定义,都支持圆括号初始化/构造
double d_aa = d_a;//定义int变量,赋值, 注意operator= 只是赋值的一种形式,字符串赋值必须strcpy
double* p_a = &a;//取地址符号&,赋给double指针。
抽象出模式/范式:
typet_a : 初始化操作; // : 表示初始化
typet_aa := 赋值操作;// := 表示赋值
type*p_a := "t_a";// " "表示取地址,地址然后赋值操作
验证:
typedef int type;自定义类型也都成立。。。
对于数组的验证:
可见,数组也是满足这个范式的,只不过数组类型的赋值和初始化有点特殊,取地址还一样。
数组究竟是什么?数组是一个函数,由类型、个数决定确定。如果抽象到跟类型无关的范式,唯一决定数组的就是个数。不同的个数对应不同类型。。。
typedef int Int5Type[5];//类型1
typedef int Int6Type[6];//类型2
数组本身不是类型,只有跟个数关联才有意义。
二维数组传参问题 add by RYF 2011-6-21
帖子链接:http://topic.csdn.net/u/20110621/11/91f21f8e-371d-40ef-b080-44d9c40e2795.html?seed=413382482&r=73957997#r_73957997
讨论:数组作为函数传参有个隐式转化,decay的过程,
void f(const char p[][10], int n) { ... }
f(p1, 5); p1是二维数组,于是会被转化为一个 数组指针,什么样的数组指针呢?是指向 有10个char元素数组 的指针。
10个char元素数组是一个类型,跟个数有关。二维数组转化为数组指针,丢失行数目信息,所以需要增加一个参数n表示行数。
void f1(const char p[][5], int n) { ... }
f1(p2, 5); 同理p2被decay为 指向 有5个char类型元素数组 的指针,同样需要传行数,
- C 指针的学习
- 函数指针的学习
- 指针的学习
- 指针的学习
- 指针的学习.
- 指针的学习
- C++的指针学习
- 函数指针的学习,
- 函数指针的学习
- *指针的基础学习*
- 指针的学习
- 指针的学习
- 函数指针的学习
- 指针的学习
- 指针的学习
- 指针的学习
- 指针数组的学习
- C++的指针学习
- ruby 闭包
- Eclipse WTP Tutorials - Creating Bottom Up Web Service via Apache Axis2
- 关于sqlite中primary key可以输入null的说明
- 继续ant
- 使用perl-ldap修改a user's password in MS Active Directory
- 指针的学习
- serio总线/platform总线
- SQL SERVER的排名函数
- 互联网产品进阶笔记(3)原型设计的工具
- Oracle 安装 注意事项
- PHP 版本的 Readability 库
- android uri用法
- 互联网产品经理进阶笔记(4)互联网创业需要哪些人呢?
- Java实现跨域文件下载(下载远程文件)