C语言的题目,求助!!!

已知
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char*)0x801000;
p2=(unsigned long*)0x810000;
请问 p1+5=? p2+5=? 要求算出结果并编程验证

#include <stdio.h>

int main(int argc, char *argv[])

{

 unsigned char *p1;

 unsigned long *p2;

 p1=(unsigned char*)0x801000;

 p2=(unsigned long*)0x810000;

 printf("p1=%x\tp2=%x\n",p1,p2);

 printf("p1+5=%x\tp2+5=%x\n",p1+5,p2+5);

 return 0;

解释:

unsigned char *p1;所以p1占一个字节,

而unsigned long *p2;p2占4个字节;

所以p1后移5个单位后就是801005;

而p2后移5个单位就是20个位移量,换成16进制也就是14,因此是810014

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-23
你好!!
#include<stdio.h>
void main()
{
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char*)0x801000;
p2=(unsigned long*)0x810000;

printf("p1=%x\n",p1);
printf("p2=%x\n",p2);

p1=p1+5;
p2=p2+5;

printf("p1+5=%x\n",p1);
printf("p2+5=%x\n",p2);

}
结果:
p1=801000
p2=810000
p1+5=801005
p2+5=810014
Press any key to continue

解释:
p1=(unsigned char*)0x801000;
是给指针变量赋值,即把十六进制0x801000放到字符指针变量中,即指针变量p1的值就是0x801000

p2=(unsigned long*)0x810000;也是给指针变量赋值,同上

输出结果p1+5的值是801005,因为指针变量指向的值字符,加一表示指针向后移动一个字节,那么加5代表向后移动5个字节,所以输入801005

p5+5的值是801016,因为指针变量指向的长整形的,加一表示指针向后移动4个字节,那么加5代表向后移动20个字节,所以输入810014,(输出时十六进制)要是十进制就是810020了本回答被提问者采纳
第2个回答  2013-05-29
int a[5]={2,4,6,8,10},*P,* *k;这句话等价于

int a[5]={2,4,6,8,10};
int *P;
int **k;

这三句。

a是一个数组
p是一个int指针
k是一个指向int指针的指针

p=a; //p指向a数组的首地址
k=&p; //取p指针的地址给k。

printf("%d",*(p++));//p++表达式返回的是当前的p值,即数组首地址。解引用后实际上输出的是a[0]
输出为2
但是输出完了之后其实p要自增,指向a[1]

printf("%d\n",* *k);//* *k等价于*(*k)。对k解引用为p。所以*(*k)等价于*p。这时p指向的是a[1]
所以输出为4

总结输出为24
第3个回答  2012-02-29
1.1 printf("%d",&a);
1.2 不能,编译时就确定了
1.3 p+2指p的值加上2*p所指向数据类型的字节数
1.4 不可以,数组名是一个地址
1.5 int argc, char * argv[] 是main函数的形参,其实参是操作系统给出或由执行文件的命令一同给出
1.6 8 可以不包含结束符
1.7 不可以
1.8 宏定义就是用一个名字代替一个字符串,简单置换 #define XXX xxx
1.9 结果出错 它们是常量
1.10 \n换行 \t移动到下一个tab位置 \b后退一格
1.11 可以 但a b必须为同类结构体变量
1.12 i++:先使用i,然后i的值加1,++i:先使i+1,在使用i
1.13 栈 一种数据结果 先进后出原则存储数据 数组 是一类数据类型 许多变量有序的排列起来
1.14 分配在内存的静态存储区 在函数调用时才分配空间,函数调用结束后仍保留,程序结束时释放
1.15 \0
第4个回答  2012-02-29
1 int a,*p=&a;然后输出printf("%ld",long(p))
2 int a[10]; 10为常量表达式,它可以包含常量和符号常量,不能包含变量.也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值.例:
下面这样定义数组大小是不行的:
int n;
scanf("%d",&n);//在程序中临时输入数组的大小
int a[n];
3 int a[10] ,*p; p=&a[0]; 而 p+2和a+2一样都是a[2]的地址
4 不能, a 实际上就是a[0] a++ 相当于对a[0]而对别的数据无作用
5 不就是定义一个 整形变量argc和一个字符型指针数组argv[
6 9
7可以 int a[3]={0,1,2,3}
8 一般形式 #define 标识符 字符串 用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量.
9 两个十六进制数
10 \n换行,将当前位置移到下一行开头\t跳到下一个Tab位置\b退格,将当前们置移到前一列
11结构体a和b它们的成员表列都不同,怎么整体赋值
12 ++i 在使用i之前,先使i 的值加1 i++在使用i之后,使i 的值加1
13 数组是有序数据的集合.数组每一个元素都属于同一个数据类型. 栈是限定仅在表尾进行插入或删除操作的线性表. 后进先出
14 静态存储区
15 \0
累啊,感觉自己翻一下书就可以啊

C语言求助,题目有图,希望过程详细一些? 。。
void fun(union data c){ c.n=100;printf("传参后fun函数中c.n赋值%d\\n",c.n);}

一个简单c语言题目,大神求助!在字符串中查找指定字符
1、打开python语言命令窗口,定义字符串变量s1并进行赋值。2、调用字符串中的count方法,查找字符#在s1中出现的次数。3、count()方法除了第一个参数之外,还可以有第二个参数,代表从什么位置开始查找。4、在count方法,还可以添加第三个参数,结束位置,开始位置到结束位置之间。5、如果需要查找的子字符...

C语言的一道题~求解~最好有原因***
正确答案是B。A和D都很明显,c 不在赋值符号最左边,所以不可能正确把值赋给a,b。对于c,是一个逻辑与表达式,一旦运算符&&前面值为假(值为0)则不会继续运算后面部分,这里c为0 ,所以后面 b = c不会执行。综上,答案为B。

大神帮忙看看,c语言题目,要有解析!!
B 运行正常,输出不正确,原因:union缺省赋值是给第1个元素。C 运行不正常。原因:comm={12.5} 后 缺少语句结束符 ;D 运行不正常。原因:comm=5; union 赋值语法错误

c语言 循环题目
题意大概意思是这样:循环进入后首先执行循环,首先判断i是否小于7,再判断如果I被2整除,i就自增1,s就是当前s和当前i相加的和,另个循环例如for 1.for 有两种形式:一种是数字形式,另一种是通用形式。数字形式的 for 循环,通过一个数学运算不断地运行内部的代码块。 下面是它的语法:block 将...

c语言程序设计简答题汇总?
C语言题目简答题1、(c=65c=90)?(c=c+32):(c=c)\/*符合你的要求,不是C语句,而是C表达式*\/ 2、a%10==5\/*符合你的要求,不是C语句,而是C表达式*\/ 3、【题目不全啊】4、【题目不全啊】5、这个题算是所有6个题中最难的了。首先,fun函数中定义了一个static类型的变量,含义如下:有...

C语言求助题目有图,希望过程详细一些!!
= 10* (0+2-5*0) % 6 = 20 % 6 \/\/取余数 = 2 当i = 1时候 a[1] = 10* (1+2-5*(1>2)) % 6; \/\/(1>2)为判断语句,1大于2为假 ,结果是0 = 10* (1+2-5*0) % 6 = 30 % 6 \/\/取余数 = 0 当i = 2时候 a[2] = 10* (2+2-5*(2>2)) % 6;...

求求你们了!急!急! C语言问题
5、在C语言中 ,指针变量能够赋地址值或——改变存储单元中存储的值 二、选择 1、设x,y均为实型变量,则以下不合法的赋值语句是C:因为=右面不许有变量。(呵呵最通俗的哦)2、以下宏定义在任何情况下计算平方数都不会引起二义性的宏定义是()。 B 因为X如果是个表达式(例如加减法)就必须...

C语言作业求助,十分感谢
C代码和运行结果如下:输如10个数,成功输出了它们的最大值、最小值和平均值,望采纳~附源码:include <stdio.h> int main() { int max, min, sum, num, i;scanf("%d", &num); \/\/ 先输入一1个数 max = min = sum = num;for (i = 0; i < 9; i++) { \/\/ 再输入剩下9...

C语言题目,求大神解答
PS p2[5] = { {1, "a", "m"}, {3, "c", "m"}, {5, "e", "m"}, {6, "f", "f"}, {7, "g", "m"} };\/\/执行删除操作 int num = delete(p1, 10, p2, 5);\/\/输出p1数组中的所有元素 printf("p1数组中的元素:\\n");int i;for (i = 0; i < num; i++...

相似回答