博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
14-数组与指针
阅读量:6092 次
发布时间:2019-06-20

本文共 2320 字,大约阅读时间需要 7 分钟。

&寻址运算符

*指针运算符

&寻址运算符与*指针运算符

具有相同的优先级,自右向左结合。

int a;

Int *p=&a;

*&a---->a

&*p---->p

 

int *p=&a;  

指针的赋值:

声明的时候:赋值int *p=&a;  

先声明再赋值:int a; int *p;  p=&a;

*p单独出现的时候是数据。

int *p 前面带有数据类型。

 

一、一维数组和指针。

1、一维数组地址。

就是数组第一个元素的地址。

 

1 #include 
2 3 int main()4 {5 int arr[5];6 printf("%d\n", &arr[0]);7 8 return 0;9 }

 

定义一个指针,把一维数组的首地址&a[0]赋予这个指针ptr,就说ptr指向数组a[5]

一个数组的数组名就是这个数组的首地址。arr[5]    &arr[0] == arr == ptr

 

2、对一维数组进行输入和输出。

A、指针不发生改变。

 

1 #include 
2 3 int main() 4 { 5 //int arr[5]; 6 7 //for (int i = 0; i < 5; i++) 8 //{ 9 // arr[i] = i + 1;10 //}11 12 13 //for (int i = 0; i < 5; i++)14 //{15 // printf("arr[%d]=%d\n", i, arr[i]);16 //}17 18 19 int arr[5];20 int *p = arr; // int *p=&arr[0];21 22 for (int i = 0; i < 5; i++) //i 0-423 {24 //只要指针变量声明完之后 p就是地址 *p就是陪这个地址指向的变量。25 *(p+i) = i + 1; //arr[0]--*p arr[1]--*(p+1) arr[2]--*(p+2)26 }27 28 29 for (int i = 0; i < 5; i++)30 {31 printf("arr[%d]=%d\n", i, *(p + i));32 }33 }

 

*只有在声明的是时候表示是指针,其他任何情况单独出现*  都表示指针运算符。

 

B、在对数组索引是,指针p发生改变,那么在打印之前必须把p重新指向数组的首地址。

1 int arr[5]; 2 int *p = arr;   // int *p=&arr[0]; 3  4   5 /******************************** 6 1: *p         -- arr[0]    1 7 2: *(p+1)     -- arr[1]    2 8 3: *((p+1)+1) -- arr[2]    3 9 ********************************/10 11 printf("赋值之前:%d\n", p);12 13 for (int i = 0; i < 5; i++) //i 0-414 {15     *p++ = i + 1; //能不能把一到5复制到数组  p是在发生变化的  16     //在一个表达式里面 p++  就是先计算表达式的值  在给p+117     // ++p  先给p+1  再计算表达式的值18 }19 20 printf("赋值之后:%d\n", p);21 22 for (int i = 0; i < 5; i++)23 {24     printf("arr[%d]=%d\n", i, arr[i]);25 }26 27  28 p = &arr[0]; //把p重新指向数组的首地址29 printf("打印之前:%d\n",p);30 31  32 for (int i = 0; i < 5; i++)33 {34     printf("arr[%d]=%d\n", i, *p++);35 }36 37 printf("打印之后:%d\n", p);

 

 

建议:遇见指针:1、这个指针的指向类型?  2、这个指针指向哪里?  3、指针自己的类型?

 

二、二维数组和指针。

1、二维数组的地址。

 

 

 

首地址:

&a[0][0]  a[0]  &a[0]  a   &a

 

行地址:

1、0行的地址就是首地址

2、1&a[1][0]   a[1]   &a[1]  a+1

3、第2&a[2][0]   a[2]   &a[2]  a+2

4、第i行  &a[i][0]    a[i]   &a[i]   a+i

蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数

 

通过行地址去找到nm列的元素。

&a[n][m]   a[n]+m  (关键是要搞清楚 以一维数组老做判断 还是以整体的二维数组来进行判断 )

 

//nm列的元素

*(a[n]+m)

*(*(a+n)+m)   //a+n  a[n]  *(a+n)   a[n]+m

 

下节课:

字符串和指针(数组和指针)  指针类型的数组

函数和指针

指针总结

结构体

预处理

位运算

数据结构

写项目

 

 

 

转载于:https://www.cnblogs.com/tiantiancode/p/11131766.html

你可能感兴趣的文章
http://www.blogjava.net/pdw2009/archive/2007/10/08/151180.html
查看>>
hadoop(6)---mapred-site.xml 详解以及常用配置。
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
BZOJ 2190[SDOI2008]仪仗队
查看>>
图解SSH原理及两种登录方法
查看>>
[转载] 七龙珠第一部——第058话 魔境圣地
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
P127、面试题20:顺时针打印矩阵
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>