7 指 针

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
面试题2:
• main() { int a[][3] = { 1,2,3 ,4,5,6}; int (*ptr)[3] =a; printf("%d %d " ,(*ptr)[1], (*ptr)[2] ); ++ptr; printf("%d %d" ,(*ptr)[1], (*ptr)[2] ); }
if( 'a'<=str[i] && str[i]<='z' ) str[i] -= ('a'-'A' );//由小写转大写
} void main() {
char str[] = "aBcDefg"; cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;//是数组的大 小6 UpperCase( str ); cout << str << endl;
意义 如果a存储在b的前面则返回true 如果a存储在b的前面,或两个指针指向 同一位置则返回true 如果两个指针指向同一位置则返回true
如果两个指针指向不同位置则返回true
如果ptr_a是空值则返回true
面试题1:以下代码中的两个sizeof用 法有问题吗?
#include <stdio.h> #include "iostream.h" void UpperCase( char str[] ) { int i;
指向 var 前面的第 i 个类型数 据
++(*ptr_var)或
指针比较
• 前提:两个指针都指向相同类型的变量
假设ptr_a =1000和ptr_b 1004分别指向a和b
操作 ptr_a < ptr_b ptr_a <= ptr_b ptr_a == ptr_b ptr_a != ptr_b ptr_a == NULL
如果ptr_var指向var,则把10赋给var。 也可以对指针赋”空”值:
ptr_var=0; //NULL 表示指针不指向任何变量.
指针运算 2-1
• 指针只能进行加法和减法运算 int var, *ptr_var; ptr_var = &var; ptr_var ++;
假定var存储在地址1000中,因为整数的长 度是 4个字节,ptr_var++的值将是1004
}
//面试题1 分析: #include <stdio.h> #include "iostream.h" void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 { int i;
for( i=0; i<sizeof(str)/sizeof(str[0]); ++i )//是指针的大小4,只循环了4次。 数组做参数,会退化为指针。可改为strlen(str),为5
例如:
int *var2;
var2
指针运算符
• &是一元运算符,它返回操作数的内存地址 int var1; int *var2 = &var1; int &a=var1;
• *是 &的反运算符,它也是一元运算符,返 回指针指向的内存位置中的值 int temp = *var2;
给指针赋值 2-1
、char和double等) 或者数组
指针可以用来做什么?
• 从函数中返回多个值 • 从一个函数向另一个函数传递数组和字符
串 • 通过移动指针操作数组 • 分配内存并对其进行访问
指针变量
• 指针声明包括类型和变量名,变量名的前 面有一个 *
type *name;
注意:这里type是任何一种有效的数据类型 ,name是指针变量名.
for( i=0; i<sizeof(str)/sizeof(str[0]); ++i if( 'a'<=str[i] && str[i]<='z' ) str[i] -= ('a'-'A' );//由小写转大写
} void main() {
char str[] = "aBcDefg"; cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;//是数组的大小6 UpperCase( str ); cout << str << endl;
• 指针变量使用之前一定要赋值. • 例如:
int var, *ptr_var,*ptr_var2;
• 通过 & 算符为指针赋值 ptr_var = &var;
• 通过另一个指向相同类型数据项的指针变 量对指针进行赋值 ptr_var2 = ptr_var;
给指针赋值 2-2
• 通过指针为变量赋值 ptr_var = &var; *ptr_var = 10;
指针
回顾
• 数组的存储机制 • 数组的定义和使用 • 数组的初始化 • 二维和多维数组
目标
• 理解指针的意义 • 掌握指针变量和指针运算符的使用 • 掌握指针与数组的关系 • 掌握内存分配
什么是指针?
• 指针是一个变量,它包含另一个变量的内存 地址
• 使用指针可以间接访问数据项的值 • 指针可以指向基本数据类型的变量(如 int
指针运算 2-2
• 指针递增时,将指向其类型的下一个元素 的内存位置,反之亦然
操作 ++ptr_var或ptr_var++ --ptr_var或ptr_var--
意义
指向 var 后面的下一个类型 数据
指向 var 前面的类型数据
ptr_var + i
指向 var 后面的第 i 个类型数 据
ptr_var - i
• 这段程序的输出是: (a) 2 3 5 6 (b) 2 3 4 5 (c) 4 5 0 0 (d) 以上均不对
指针与一维数组 3-1
• 在C语言中数组名实际是一个指向数组中第 一个元素的指针
• 数组元素的地址可以用两种方式表示
– 在数组元素前面加“&”符号 &ary[2]
– 数组名 + 下标 ary + 2或ary+i 这里i必须是整数 ary+i表示数组的第i个元素的地址
*(ary+i)表示什么呢?
指针与一维数组 3-2
下面程序说明了数组元素与其地址之间的关系:
#include <stdio.h> void main() {
static int ary[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int i; for (i = 0; i < 10; i ++) {
相关文档
最新文档