数组与指针(四)——指针操作

// ptr_ops --指针 操作 
#include<stdio.h>
int main(void)
{
   int urn[5] = {100,200,300,400,500};

int *ptr1,*ptr2,*ptr3;

ptr1 = urn;       //把第个地址赋给指针
    ptr2 = &urn[2];   //同上

printf("pointer value ,dereferenced pointer ,pointer address:/n");            //取得指针到值并去取得指针到地址
    printf("ptr1 = %p  ,   *ptr1 = %d,      &ptr = %p  /n  ",     ptr1,      *ptr1,       &ptr1);           //ptr1 = %p ,urn数组首地址,   100  ,指针变量自身的门牌号码,他家里存的是 数组urn 的首地址

ptr3 = ptr1 + 4;                                                              //指针加法
  printf("/nadding an int  to a pointer :/n");
  printf("ptr1 + 4 = %p,    *(ptr1 + 3) = %d  /n ",         ptr1 + 4,       *(ptr1 + 3)    );        // 因为一个地址代表一个字节,一个字节八位,参考博客 32位机器上的图片。

// 这里是指 &urn[4]的地址,应该与第一个相差4*4即 16个字节,   *(ptr1+3)=400

ptr1++;                                                                       //递增指针                    
  printf("/nvalues after ptr1++/n");
 printf("ptr1 = %p  ,   *ptr1 = %d,       &ptr1 = %p   /n",        ptr1,      *ptr1,     &ptr1);         // 数组第二个元素地址 , 200  ,      指针变量自身的门牌号码,他家里存的是 数组urn 的首地址

ptr2--;                                                                       //递减指针                
printf("/n values after --ptr2/n");

printf("ptr2 = %p,*ptr2 = %d,&ptr2 = %p/n",ptr2,*ptr2,&ptr2);                      // 首元素地址+4 ,       200   ,          ptr2指针变量自身的门牌号码

--ptr1;                                                                       //恢复初始值

++ptr2;                                                                       //恢复初始值

printf("/npointer reset to original values/n");
  printf("ptr1 = %p,ptr2 = %p/n",ptr1,ptr2);

printf("/nsubtracting one pointer from another /n");
 printf("ptr2 = %p,ptr1 = %p ,ptr2 - ptr1 = %d/n",ptr2,ptr1,ptr2 - ptr1);      //指针减法

printf("/nsubtracting an int from a pointer/n");
  printf("ptr3 = %p,ptr3 - 2 = %p/n",ptr3,ptr3 - 2);
return 0;

}

结果:

仔细看看,就懂了,不是很难的!!!!!

时间: 2024-08-11 08:55:02

数组与指针(四)——指针操作的相关文章

四 指针与数组 五 函数

四 指针与数组 <一> 指针  就是地址 1 定义 int *p; 2 初始化 int a,*p=&a; 把a的地址给*p 指针变量有了谁的地址就是指向谁.则*p就代表了这个变量.*p代表 a 3 操作 int a ,*p=&a; *p=5;        <-----把5赋值给了a int *p,a; *p=[*&]a; | 抵消了 *p <=>a 等价 注意 : * 三个用途  1 乘法运算 2 取值运算符 3 说明符 定义时候用到 如 int a

第四章 数组,字符串和指针

数组 数组若没有指定初始值则为内存遗留值 如果指定了部分初始值,那么其余部分也默认被指定为0: long data[100]={0};          //给data数组的所有元素赋0 字符串是附加有特殊字符(/0)的字符序列 数组的填充: char president[]="thank you"; wchar_t president[]=L"thank you";     //Unicode字符串 const int max=80; char name[max]

四、基于文件指针的文件操作

基于文件指针的文件操作(缓冲) linux的文件和文件描述符 linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件. 普通文件:也称磁盘文件,并且能够进行随机的数据存储(能够自由seek定位到某一个位置): 管道:是一个从一端发送数据,另一端接收数据的数据通道: 目录:也称为目录文件,它包含了保存在目录中文件列表的简单文件. 设备:该类型的文件提供了大多数物理设备的接口.它又分为两种类型:字符型设备和块设备. 字符型设备一次只能读出和写入一个字节的数据,包括

指针数组、数组指针、函数指针、指针函数总结

指针数组 && 数组指针 char *a[5]; //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark","green"}; //a在这里的类型是char *[],实质上是一个二级指针.也就是说a所代表的那块内存里面存放着的是数组中第一个

指针数组,数组指针,指针函数,函数指针,二级指针详解

先看个简单的:char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P: char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型.所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组. char(*p

指针数组、数组指针、函数指针、指针函数总结C++

指针数组.数组指针.函数指针.指针函数总结 2014-11-11 指针数组 && 数组指针 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 char *a[5];      //定义一个指针数组, 数组的元素都是char *指针类型.初始化也可以在里面存放字符或字符串.a的类型是char *[5] //若char *a[5]={"red","white","blue","dark",&qu

「C」 数组、字符串、指针

一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数]: 举例:存储5个人的年龄 int agrs[5];  // 在内存中开辟4x5=20个字节的存储空间 可以在定义数组的同时对数组进行初始化: int ages[5] = {17,18,19,20,21}: 遍历数组: for(int i = 0;i<5;i++) { printf(“ages[%

C语言 指针基础篇 数组,函数与指针的运用 2 14

下面看看如何在函数中运用指针吧 下面是往函数传入指针的简单操作,不是传入数组的.判断一个a是否大于b是的话给,是的话对其进行操作,不是的话就直接返回. 1 #include <stdio.h> 2 int main(){ 3 int num1,num2,*p1,*p2; 4 p1 = &num1,p2=&num2; 5 scanf("%d%d",&num1,&num2); 6 7 int fun(int *n1,int *n2); //我们在

C++——指针---指向数组的指针---指向字符串的指针--指向函数的指针--指针的指针--指针的引用

一.指向数组的指针 代码示例1: 1 int main() 2 { 3 int a[10]={0,2,4,6,8,10,12,14,16,18}; 4 int *p; 5 for(p=&a[0];p<&a[0]+10;p++) 6 printf("%d ",*p); 7 } 代码示例2: int a[10]={0,2,4,6,8,10,12,14,16,18}; int *p; p=a; printf("%d\n",*(a+5));//注意加括

数组指针、指针数组、函数指针、指针函数 -----笔记

1.数组的四种访问方式 定义数组 a[]; 指针 *p 指向数组a; (1) 利用数组的下表进行访问 a[i]; (2) 数组名+地址的偏移量i *(a+i) (3) 利用指针 p 进行下表访问 p[i] (4) 指针p + 地址的偏移量i *(p+i) 一维数组数组名:相当于一个单指针 2. 数组指针(指针)     指针数组(数组) 函数指针(指针)     指针函数(函数)    -------->只看后边两个字就能够区分是指针还是数组或函数 _______________________