关键词:
#include <stdio.h> int main(int argc, char *argv[]) { int a[3]={1,2,3}; int (*pa)[3]; // *pa=a; //错误,因为pa没有被赋值,怎么取值,语法错误。 pa=&a; //正确,&a为指向数组的地址,和pa类型匹配 printf("*pa=%p ",*pa); //正确,*pa含义为:对pa解引用,得到数组a的地址。 printf("*pa+1=%p ",*pa+1); //正确,*pa+1:先计算*pa(相当于数组名,默认被编译器自动转换为数组>首元素首地址)得到数组首元素地址,然后加1,移动4个字节 printf("*(pa+1)=%p ",*(pa+1)); //正确,*(pa+1):先计算(pa+1),因为pa为数组首地址(注意不是数组首 元素地址)类型是整个数组,所以(pa+1)移动了整个数组的字节数,也就是12个字节。 printf("&*pa=%p ",&*pa);//正确,由这个可以看出(*pa)被编译器看作是数组名,因为对数组名取地址得>到的指针类型是整个数组结构。 printf("&*pa+1=%p ",&*pa+1);//结果是移动了12个字节,表明(&*pa)为指向数组的指针。 // *pa=a; //错误,因为(*pa)为数组a的地址,是一个地址直接量,不可以改变。 // *pa=&a; //error // *pa=&a[0]; //error // *pa=*pa+1; //错误,同理(*pa)为一个地址直接量,不是左值,不能进行自加运算。 *pa++; //正确,自加的是pa不是(*pa),不信你可以试试:(*pa)++ printf("*pa=%p ",*pa); return 0; }
带你搞懂指针和数组方面的相关例题(代码片段)
引言要搞懂下面这些例题,首先你要知道关于数组名的意义以下这几点:数组名的意义:sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。&数组名,这里的数组名表示整个数组ÿ... 查看详情
关于指针的一些经典例题详解(代码片段)
指针学完之后,对指针是否深刻理解,以下是一些关于指针的经典例题,通过例题可以回顾一下指针的相关内容:代码示例1:intmain()inta[5]=1,2,3,4,5;int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1) 查看详情
双指针算法:同向双指针模板以及相关面试题(代码片段)
...点:例题:两数之差问题给定一个排序后的整数数组, 查看详情
c语言二级指针作为输入(指针数组|复杂指针解读)(代码片段)
文章目录一、指针数组二、复杂指针解读三、数组指针代码示例一、指针数组定义一个数组指针:数组中的元素是指向字符串的指针,即每个数组元素只有4字节;char*array[]="abc","123","258","sfd";遍历上述数组... 查看详情
指针和二维数组
array这里指向的是第一行的五个元素 可以证明: 我画了一个图 二维数组指针的结论:①所谓的多维数组其实就是一维数组线性扩展得到的 一道题目: 查看详情
二维数组和数组指针的关系
昨天既然写了一些关于数组指针的话题,那么今天就写一些关于数组指针的话题吧! 数组指针:这样读数组的指针,即指向数组的指针,就是数组指针,其本质就是一个指针 比如:int(*a)[3];就是一个数组指针,运用... 查看详情
关于c中数组和指针的一点理解
今天在看了专家c的第四章后对数组和指针有了更深入的理解 首先1/*文件1*/2intp[100];34/*文件2*/5externint*p;67/*.........................*/89/*.............对p[i]相关的操作.................*/ 为什么会这样呢?指针和数组难道不就是一个... 查看详情
二维数组和二级指针关系浅析
昨天写了关于一级指针的见解,即二级数组的用法和二级指针差不多,关于数组指针和指针数组这两个是不同的概念,这一点我们一定要清楚; 数组指针我们可以理解为指向数组的指针,就是一个指针; 指针数组则... 查看详情
一道set例题
一、题目最近某地连续发生了多起盗窃案件,根据监控和路人提供的线索得知,这是一个犯罪团伙。并且还知道这个犯罪团伙中每个人的身高、体重、年龄。警察想知道这个犯罪团伙中的每个人是不是本市的(如果本市有这个特... 查看详情
关于指向数组的指针的问题? [复制]
】关于指向数组的指针的问题?[复制]【英文标题】:Issueregardingpointertoarray?[duplicate]【发布时间】:2018-12-0608:24:29【问题描述】:我试图学习指向数组的指针,但我无法理解为什么*ptr和ptr打印相同的值/*Hereisthesourcecode.*/#include<... 查看详情
关于数组与指针
今天写代码的时候遇到一个大坑,顺便把以前的东西捋一捋。 在C/C++、Unix最早设计的语言哲学里,变量就对应内存空间。一个内存空间有两部分信息,手里的内容和脚下的地址,于是有了间接寻址,有了链式数据结构,... 查看详情
关于scanf的输出问题,有高手请教一下如何用scanf输出多种类型的变量,下面是我写的例题
#include<stdio.h>intmain()inta;char*b;scanf("%d,%s",&a,b);printf("%d,%s\n",a,b);return0;这个例子比较简单,我在键盘上键入2,abc然后回车,但是输出段错误;然后我直接重新执行程序键入22回车,输出22,乱码;老跳出来段错... 查看详情
子数组/子序列/子串dp问题的总结(代码片段)
文章目录关于这一类问题的相同处理两个例题探讨子数组dp的处理方式例题一:连续子数组的最大和例题二:最长连续递增子序列关于这一类问题的相同处理关于序列/子数组/子串问题的dp我们一般都用dp[i]代表以nums[i]结... 查看详情
关于返回二维数组指针问题
所谓的二维数组指针,是指针的指针,指的就是二维数组在内存中的存储地址。二维数组的地址与一维数组的地址的不同点是:它除了有元素地址外,还有标识各行起始位置的行首地址(称为行的首地址)。行的首地址... 查看详情
二维数组和指向指针的指针
一道面试题引发的问题,首先要知道[]的优先级高于*,题目:char**p,a[6][8];问p=a是否会导致程序在以后出现问题?为什么?直接用程序说明:#include<stdio.h>voidmain(){char**p,a[6][8];p=a;printf(" ");}编译,然后就会发现通不过,报错... 查看详情
指针和数组关系的浅析
关于指针和数组之间的关系,估计有人还是对于数组与指针地址的关系有些模糊,对于这点,我今天对这一点做一个小小的总结好了; 我们已经知道指针和数组的用法差不多,但是指针的地址和指针指向的地址是不一样... 查看详情
关于c语言二维数组列指针初始化
关于c语言二维数组列指针初始化下图关于那个列指针的初始化有不懂。p=a[0],p=*a,p=&a[0][0]。书上说这三者等价,但是我有点不懂。1.按照指针初始化的定义,int*p=&a[0][0];这一点,完全没问题,就算传了二维数组的首地址给指针... 查看详情
关于指针数组字符串的恩怨,这里有你想知道的一切(代码片段)
关于指针、数组、字符串的恩怨,这里有你想知道的一切内存组成、字符串定义、一/二维数组结构、数组中的指针等价关系、数组结构中对“指针常量”的理解、指针vs数组内存结构一图流、OneMoreThing:当二维数组遇见qsort()库... 查看详情