C语言学习篇-9指针运算、指针与数组
来源:互联网 发布:阿里云搭建http代理 编辑:程序博客网 时间:2024/05/02 01:53
说明:本文主要阐述指针的基本运算及算术运算,指针与数组的关系,指针与字符串的关系。
指针运算
1.指针的基本运算包括取地址以及取值运算等运算。
单目运算符“&”是取操作对象的地址,“*”是取指针指向的对象的内容,两个互为互逆运算。
示例:
int a = 10,*p; p = &a;//p指针指向了a所在的地址,&a就是将a所在的地址取出来; *p = 90;//p指向的地址内容由10修改为90,这时a等于90;
2.指针的算术运算
指针的算术运算与其基类型有关,所谓的基类型就是所定义的变量的类型。
示例:
#include <stdio.h>int main() { double a = 10.6;//double类型的a,基类型为double,占8个字节地址 int b = 89.5;//int类型的b,基类型为int,占4个字节地址 double *pa = &a;//指针赋值 int *pb = &b; printf("pa = %p\n",pa);//打印初始地址 printf("pb = %p\n",pb); pa += 2;//指针变量加2 pb += 2; printf("pa = %p\n",pa);//打印加1后的地址 printf("pb = %p\n",pb); return 0;}
运行结果:
pa = 0x7fff5fbff750pb = 0x7fff5fbff74cpa = 0x7fff5fbff760pb = 0x7fff5fbff754
从运行结果可以看出,pa指针在加2运算后,地址增加了16,而pb加2运算后指针所指向的地址增加了8,这是为什么呢?没错,就是加上了基类型所占的字节数乘以n。假设指针所指向的地址为a,在进行加n运算后,所指向的地址为基类型所占字节*n再加上a,指针减法运算同理。
3.指针与数组
先定义一个数组:int array[4] = {3,5,6,7};
在这里,array为数组名,在计算机中代表的是该数组的首地址,即*array会等于3;这里array可以看做是一个常量,不可以使用自加之类的运算。
再定义一个指针变量int *parr; parr = array;
parr是一个指针变量,parr = array的含义为将数组array的首地址赋值给parr值,现在我们可以通过parr指针就可以访问整个array数组,但是parr指针本质并没有改变,依然是一个指针变量,它不能够代表整个数组的内存,相当于是array的一个代表,可以处理数据,但是没有所有权。由于parr依然是指针变量,所以我们可以对它进行自加之类的运算,例如:parr++;
自加之后parr指针指向了&array[1];也可以通过parr指针访问数组里面的元素,例如:*parr;
看文字不爽?上代码:
#include <stdio.h>int main() { int array[4] = {3,5,6,7}; printf("%d\n",*array);//打印3 //array++;//编译不通过,会报错,array是常量,不能够执行自加运算 int *parr = array;//array数组的代表登场 *parr = 8;//代表说我有权更改数据 printf("%d\n",array[0]);//打印8 parr++;//由于代表是指针类型,有自己的特殊功力,开始自加 printf("%d\n",*parr);//5 printf("%d\n",array[1]);//5 return 0;}
总结
1.指针在C语言中可以灵活的运用;
2.数组名为数组所存储空间的首地址。
练习
1.求下面程序的运行结果?为什么?答案
#include<stdio.h>int main(void){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1)); return 0;}
- C语言学习篇-9指针运算、指针与数组
- C语言学习大纲--数组与指针
- C语言--数组与指针的学习
- C语言数组与指针学习总结
- C语言:指针数组与数组指针
- C语言指针数组与数组指针
- C语言指针数组与数组指针
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- C语言指针学习(二) ---- 指针与数组
- C语言学习(六)指针2 数组与指针
- C语言学习——指针与数组、空指针
- android ndk 02 C语言 二级指针 指针运算 指针与数组
- c语言二维数组的下标运算与指针偏移
- C语言指针-----指针与数组
- C语言指针详解-----数组与指针
- C语言指针与数组
- C语言 指针与数组
- C语言指针与数组
- 内省—beanutils工具包 操作javabean属性
- epub是什么文件?epub文件怎么打开?
- CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 4
- Jackson入门教程
- 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,
- C语言学习篇-9指针运算、指针与数组
- C语言到c++的第一步 注释转换
- POJ 2688 Cleaning Robot
- java socket实现文件的上传和下载试例
- 两款JSON类库Jackson与JSON-lib的性能对比
- 工厂模式
- Class.forName()用法详解
- linux如何查看系统信息,系统命令
- Picasso入门教程(八)通过Tag()来管理图片