如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
(1)const char *p
一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如: const char *p; char c1='a'; char c2='b'; p=&c1;//ok p=&c2;//ok *p=c1;//error (3)char * const p
此时*p可以修改,而p不能修改。
(4)const char * const p 这种是地址及指向对象都不能修改。
-------------------------------------------------------------------------- 6.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么? int n; if (n == 10) // 第一种判断方式 if (10 == n) // 第二种判断方式
如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=
-------------------------------------------------------------------------- 7.下面的代码有什么问题? void DoSomeThing(...) { char* p; ... p = malloc(1024); // 分配1K的空间 if (NULL == p) return; ... p = realloc(p, 2048); // 空间不够,重新分配到2K if (NULL == p) return; ... }
A: p = malloc(1024); 应该写成: p = (char *) malloc(1024); 没有释放p的空间,造成内存泄漏。
-------------------------------------------------------------------------- 8.下面的代码有什么问题?并请给出正确的写法。 void DoSomeThing(char* p) { char str[16]; int n; assert(NULL != p); sscanf(p, "%s%d", str, n); if (0 == strcmp(str, "something")) { ... } }
A: sscanf(p, "%s%d", str, n); 这句该写成: sscanf(p, "%s%d", str, &n);
-------------------------------------------------------------------------- 9.下面代码有什么错误? Void test1() { char string[10]; char *str1="0123456789"; strcpy(string, str1); }
数组越界
-------------------------------------------------------------------------- 10.下面代码有什么问题? Void test2() { char string[10], str1[10]; for(i=0; i<10;i++) { str1[i] ='a'; } strcpy(string, str1); }
数组越界
-------------------------------------------------------------------------- 11.下面代码有什么问题? Void test3(char* str1) { char string[10]; if(strlen(str1)<=10) { strcpy(string, str1); } }
==数组越界 ==strcpy拷贝的结束标志是查找字符串中的\0 因此如果字符串中没有遇到\0的话 会一直复制,直到遇到\0,上面的123都因此产生越界的情况
建议使用 strncpy 和 memcpy
-------------------------------------------------------------------------- 12.下面代码有什么问题?
#define MAX_SRM 256
DSN get_SRM_no() { static int SRM_no; //是不是这里没赋初值? int I; for(I=0;I<MAX_SRM;I++,SRM_no++) { SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { break; } } if(I>=MAX_SRM) return (NULL_SRM); else return SRM_no; }
系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入...
-------------------------------------------------------------------------- 13.写出运行结果: {// test1 char str[] = "world"; cout << sizeof(str) << ": "; char *p = str; cout << sizeof(p) << ": "; |