printf(\s[0]='B';
printf(\有什么错?
答: \是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s=\
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
7.用变量a给出下面的定义
a)一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
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 )
答案是:
Int (*p[10])(int); a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int);// A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
3.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
4.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN( A,B) ((A) <= (B) ?(A) : (B)) A <= B ?A : B
5.关键字static的作用是什么?
在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的全局变量在这一函数被调用过程中维持其值不变。 (值的保存)
2). 在模块内(但在函数体外),一个被声明为静态的全局变量可以被模块内所用函数访问,但不能被模块外其它函
数访问。它是一个本地的全局变量。 (限制作用域) 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 (限制作用域)
6.关键字const是什么含意?下面的声明都是什么意思? 1 const int a; 2 int const a; 3 const int *a; 4 int const * a; 5 int * const a;
6 int const * const a;
1、const int a; 2、int const a;
3、 4、内容不可变,指针可变 : const int *a; 5、内容不可变,指针可变 : int * const a;
6、内容可变,指针不可变 : int const * const a;
8. 关键字volatile有什么含意 并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
6. int (*s[10])(int) 表示的是什么啊
int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
1.有以下表达式:
int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const int *const f =&a;
请问下列表达式哪些会被编译器禁止?为什么? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; 答:*c 这是个什么东东,禁止 d=&b是很OK e=34 不OK
e = &a 说了是const 禁止 e的地址不能改
const int *const f =&a; 禁止 f的内容和地址都不能改
2.交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;
答:有两种解法, 一种用算术算法, 一种用^(异或) a = a + b; b = a - b; a = a - b; or
a = a^b;// 只能对int,char.. b = a^b; a = a^b;
2个bit (bit1与bit2异或,结果为0说明它们不同,则bit2异或0可把bit1还原。
结果为1说明它们相同,则bit2异或1可把bit1还原。
4.#include
void getmemory(char *p) //函数的参数是局部变量,在这里给它分配内存还在,但是P释放了。 {
p=(char *) malloc(100); }
int main( ) {
char *str=NULL; getmemory(str);
strcpy(str,\printf(\free(str); return 0; }
答: 程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险
解决方案1:可改为按引用传递:void getmemory(char *&p)
解决方案2:返回指针 Char* getmemory(char *p) {
p=(char *) malloc(100); return p; }
5.char szstr[10];