C习题 数组地址推算

供稿:hz-xin.com     日期:2025-01-14
c 数组题

v1,v2,v3,v4分别为 5,7,8,1
因为每个case都没有break语句,所以
s[0]=1时 case 1:v1++;
case 2:v2++;
case 3:v3++;
都会执行,其他依次类推。

大概是这样写的,补充完整调试一下。
#include
using namespace std;

int main()
{
char name[][]={自己输入};
int number[]={自己输入};
int num;
bool flag=false;
cout<<"输入查找学生的学号:";
cin>>num;
for(int i=0;i<n;i++)//n是学生总数
{
if(num==number[i])
{
cout<<name[i]<<endl;
flag=true;
break;
}
}
if(!flag)
cout<<"未找到"<<endl;
return 0;
}

第一题:p为a[3]的地址,数组a为long型数组,1个单元占用4个字节,第一个输出了a的地址(即a[0]的地址)为100(十六进制),p=a+3*4=100(十六进制)+C(十六进制)=10C(十六进制)
第二题:
p为指针数组,p[0]指向a的第0行的起始地址,p[1]指向a的第1行的起始地址,p[2]指向a的第2行的起始地址,p[3]指向a的第3行的起始地址
*(p+3)+3等价于*(p[3])+3,*(p[3])的值为a的第3行的起始地址,即100+4(long型占用的字节数)*4(一行有4列)*3(第3行前有3行)=100(十六进制)+30(十六进制)=130(十六进制),*(p+3)+3表示再偏移3个单元(即a[3][3]的地址),由于1个单元占用4个字节,也就是130(十六进制)+3*4(十六进制)=130(十六进制)+C(十六进制)=13C(十六进制)

C习题 数组地址推算
第一题:p为a[3]的地址,数组a为long型数组,1个单元占用4个字节,第一个输出了a的地址(即a[0]的地址)为100(十六进制),p=a+3*4=100(十六进制)+C(十六进制)=10C(十六进制)第二题:p为指针数组,p[0]指向a的第0行的起始地址,p[1]指向a的第1行的起始地址,p[2]指向a的第2行...