a) 一个指向指针的的指针,它指向的指针是指向一个整数
b) 一个有10个指针的数组,该指针是指向一个整数
c) 一个指向有10个整数数组的指针
d) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整数
- #include
- using namespace std;
- void AllocMemory(char *p,int num)
- {
- p = (char *)malloc(sizeof(char)*num);
- }
-
- int main() {
- char *p = NULL;
- AllocMemory(p, 512);
- strcpy(p,"nd");
- return 0;
- }
- struct TT
- {
- TT(int) { }
- TT(){}
- void fun(){}
- };
-
- int main ()
- {
- TT a(1);//语句1
- a.fun();//语句2
- TT b();//语句3
- b.fun();//语句4
- return 0;
- }
typedef int (*test) ( float * , float*)
test tmp;
tmp 的类型是:___C___。
(a) 函数的指针,该函数以 两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型指针
(b) 整型指针
(c) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型
(d) 以上都不是
下面的代码输出是什么,为什么?
void test(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts("> 6") : puts("<= 6");
}
int counter (int i)
{
static int count =0;
count = count +i;
return (count );
}
main()
{
int i , j;
for (i=0; i <=5; i++)
j = counter(i);
}
本程序执行到最后,j的值是:__B___。
(a) 10
(b) 15
(c) 6
(d) 7
main()
{
int a[][3] = { 1,2,3 ,4,5,6};
int (*ptr)[3] =a;
printf("%d %d " ,(*ptr)[1], (*ptr)[2] );
++ptr;
printf("%d %d" ,(*ptr)[1], (*ptr)[2] );
}
这段程序的输出是: __A___。
(a) 2 3 5 6
(b) 2 3 4 5
(c) 4 5 0 0
(d) 以上均不对
的是___D__。
a. while (p && *p) // p为指针变量
b. if (1 == flag) // flag为布尔变量
c. if (0.0 == x) // x为浮点变量
d. if (strlen(strName) != 0) // strName为字符串变量
(1) 编写两个宏实现一个字节无符号整数的16进制与压缩bcd码进行互相转换。假设数值大小不超过99
例如:“0x12”是16进制表示法,10进制数为“18”,记为“0x18”
#define BYT_HEX2BCD(x) ( (x/10 )<<4) + (x%10)
#define BYT_BCD2HEX(x) ( (x>>4)*10 ) + (x&0x0f)
(2) 写个函数实现将ASCII码串转换为16进制数组
例:ASCII串为“8e349bcd45”转换为
0x8e,0x34,0x9b,0xcd,0x45
阅读题。
(1)void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
程序出错。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序出错。
同时GetMemory中分配的内存得不到释放,内存泄漏
(2)char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
(3)Void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
能够输出hello,但内存泄漏
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行Test函数会有什么样的结果?为什么?
有如下定义:
#pragma pack(8)
struct tagS1
{
char c;
int i;
};
#pragma pack()
#pragma pack(2)
struct tagS2
{
char c;
int i;
};
#pragma pack()
若编译器支持指定的对齐方式,则计算:
sizeof(tagS1) = 8
sizeof(tagS2) = 6
指出下列代码运行时可能出错,或者编写不够规范的地方
int func( int par1, char par2)
{
int i;
i ++;
if( i == 1 ){
………………..
par1 = 100 / par1;
……………….
char c = par2 ++;
………………
}
return par1;
}
嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Littleendian模式的CPU对操作数的存放方式是从低字节到高字节,就是低地址放低字节,而Big-endian模式对操作数的存放方式是从高字节到低字节,就是低地址放高字节的拉。
请写一个函数,来判断处理器是大端还是小端模式
有如下链表结点定义:
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;
已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)
(1)解释linux下常用命令:
rm 删除
cp 复制
mount 挂载
chmod 更改权限
ls 输出目录信息
(2)遇到不熟悉的命令,你会?
使用man命令查找帮助
所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,一旦程序发生了越界访问,CPU就会产生相应的异常保护,于是segmentation fault就出现了。
例1
往受到系统保护的内存地址写数据(如内核占用的或者是其他程序正在使用的)
#include
int main()
{
int i = 0;
scanf ("%d", i); /* should have used &i */
printf ("%d\n", i);
return 0;
}
例2
内存越界(数组越界,变量类型不一致等)
#include
int main()
{
int b = 10;
printf("%s\n", b);
return 0;
}
如何发现程序中的段错误并处理掉?
make:编译和连接程序。
make objs:仅仅编译程序产生 .o 目标文件,不进行连接。
make clean:删除编译产生的目标文件和依赖文件。
make cleanall:删除目标文件、依赖文件以及可执行文件。
make rebuild:重新编译和连接程序
a) 一个整型数(An integer) (示例: int a;)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to
integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function
that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf("\nArea = %f", area);
return area;
}
①问6个月后有多少对兔子
②用递归实现
③不要用递归实现
已知strcpy函数的原型是 char *strcpy(char * strDest, const char* strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)char*p=“hello wrold\n”;
大小(P)与strlen(P)分别等于多少?
(2)char str[]=“hello wrold\n”;
(Str)与strlen(Str)分别等于多少?
orial bus that provideso the IIC
The inter-IC bus (IC) is a two-wire, bidirectional seing a two-wire deviceseandefficient method of data exchange between devices. Bertions between devicesibus minimizes the need for large numbers of connections
eliminates the need for an address decoder.ocasional communications over nqThis bus is suitable for applications requiringleo providesflexibility, allowsshort distance between a number of devices.It also PrOr expansion and systemadditional devices to be connected to the bus for further development.
(1)char *p="hello wrold\n";sizeof(p)与 strlen(p)分别等于多少? (6分)(2)char str]="hello wrold\n";sizeof(str)与strlen(str)分别等于多少?
unsigned char*p1;
unsigned long*p2;
p1=(unsigned char *)0x801000;p2=(unsigned long *)0x810000;
请问: [1] p1+5= ?
[2] p2+5= ?
enum IndexOfString
x1,
x2= 19,x3,
x4
}a、b;
a= x1;
b= x4;
请问: [1] a= ?
[2] b= ?