我们先来看一下,&a先把整个数组的地址拿出来然后进行+1然后强制转换为 int类型的指针传给我们 ptr1。* 那么 *ptr1,不就指向与数组相邻的那个元素了吗! ptr1[-1] 就右回到了,数组的最后一个元素 int *ptr2 = (int *)((int)a + 1); 🔥注:这里需要用到大小端存储的概念!不会的也去看看 这里只...
现在对其进行解引用,p是一个指向数组的指针,所以它依然是指向一个含有四个整型的数组(从p开始向后数四个整型),对p+4解引用得到的是这个数组的数组名,即为首元素地址,即图中箭头所指位置的地址,再对首元素的地址加2,得到p[4][2]的地址。即为这个位置: 这个地址就是&p[4][2],同时我们也可以找到a[4][...
int *ptr = (int *)(&a + 1); //&a:取出整个数组的地址,&a+1:跳过一个数组 //&a的类型为:数组指针 int(*)[5] 所以要强转 //a为数组名,首元素地址,即为1的地址,+1,跳过一个元素,即为2的地址 printf( "%d,%d", *(a + 1), *(ptr - 1)); // 2 5 return 0; } 图解: 二.笔...
&aa+1中&aa是整个二维数组的地址,因此&aa+1是跳过整个二维数组,(int*)将&aa+1强制转换为整形类型的指针 (aa+1)中aa是第一行的地址,(aa+1)就是aa[1],aa[1]就行相当于第二行的数组名,aa[1]=&aa[1][0],这里的强制类型转换其实是多余的,因为第二行第一个元素本来就是整形,取他的地址就是整形类...
C数组指针题(含答案)数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。输入:10 2 7 9 ...
好了,说下在【上机实验蓝皮书背后,综合测试题二】中难到的2道题,这两道题使得你对【指针数组】和【数组指针】的区别更加清晰。 【例题1】 有以下程序: 1#include <stdio.h>23intmain()4{5char*s[] = {"one","two","three"}, *p;6p = s[1];7printf("%c, %s\n",*(p+1), s[0]);8retu...
🔖思路一:暴力求解 我想暴力求解应该是第一次接触到此题的小伙伴们最先想出来的办法吧。这道题目暴力求解就是去遍历数组,当遇到数组元素等于 val 的时候,将后面的所有元素往前挪动一位,把 val 覆盖掉以实现移除的效果。具体过程如下动图所演示:代码实现: Plain Text 复制代码 99 1 2 3 4 5 6...
C语言——指针和数组练习题解析 指针和数组习题 前言: 一、一维数组 二、字符数组 三、二维数组 四、指针题目 前言: 学习了指针的初阶和进阶后,已经对指针有了一定了解。下面就需要做题目,去巩固所学的知识。 对数组名的理解: 数组名是数组首元素的地址,但是由两个例外 ...
1、数组指针 01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为 3 的倍数的元素。输入格式:第一个整数为个数 n,后续为n个整数输出格式:第一行能被3 整除的元素,第二行为下标为3 的倍数的元素,各个数值之间用空格分隔。输入: 10 2 7 9 10 5 ...
C语言第十一章节指针试题附答案.doc,C语言第十一章节指针试题附答案 1. 若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为6的表达式是( ) [单选题] A、 *p+6 B、 *(p+6) C、*p+=5(正确答案) D、 p+5 答案解析:考查指针和数组。int *p=a,表示指针指向了数组a