关于数组和指针的一道例题的解读

立体风 立体风     2022-10-01     333

关键词:

#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()库... 查看详情