本文主要是介绍2013.8.28,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第1个问题:
下面的程序输出什么?为什么?
const int g_c = 5;
int main()
{
const int a = 10;
int* p = (int*)&a;
int* pg = (int*)&g_c;
*p = 1;
printf("a = %d\n", a);
printf("*p = %d\n", *p);
*pg = 2;
printf("g_c = %d\n", g_c);
printf("*pg = %d\n", *pg);
return 0;
}
下面的程序输出什么?为什么?
const int g_c = 5;
int main()
{
const int a = 10;
int* p = (int*)&a;
int* pg = (int*)&g_c;
*p = 1;
printf("a = %d\n", a);
printf("*p = %d\n", *p);
*pg = 2;
printf("g_c = %d\n", g_c);
printf("*pg = %d\n", *pg);
return 0;
}
在C++中的输出是:
a = 10
*p = 1
在C语言中的输出是
a = 1
*p = 1
在C++中const得到真正的加强,变成了真正意义的常量。虽然在取地址的情况下编译器为其分配了空间(C语言必定义static变量就为他分配空间),但是这个空间里面的值其实没有用。
为什么最后两个没有打印呢,因为C语言一定会把全局const变量放入只读存储区,而C++则在取地址的情况下在只读空间中为const常量分配空间,既然是只读的,那么代码中试图改变这个值肯定会产生段错误。
a = 10
*p = 1
在C语言中的输出是
a = 1
*p = 1
在C++中const得到真正的加强,变成了真正意义的常量。虽然在取地址的情况下编译器为其分配了空间(C语言必定义static变量就为他分配空间),但是这个空间里面的值其实没有用。
为什么最后两个没有打印呢,因为C语言一定会把全局const变量放入只读存储区,而C++则在取地址的情况下在只读空间中为const常量分配空间,既然是只读的,那么代码中试图改变这个值肯定会产生段错误。
局部静态变量在静态存储区
类似static var = 1;这样的方式,那数据会在data段,如果是static var;这样的定义方式,那数据会在bss段;前者在生产可执行文件时就分配好内存 (编译时确定), 后者在加载时才分配。malloc之类或局部变量,才会在运行期动态分配内存 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) 功能: 在字符串中找出连续最长的数字串,并把这个串的长度返回, 并把这个最长数字串付给其中一个函数参数outputstr所指内存。 例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9, outputstr所指的值为123456789 给个提示这个问题可以在遍历一般字符串后得到答案 就是一个统计的问题已 #define IS_FIGURE(x) ((x) >= '0' && (x) <= '9') int continumax(char *outputstr,char *inputstr) { int maxLen = 0; int currentLen = 0; char* pMaxStart = NULL; char* pCurrentStart = NULL; char* pCurrent = inputstr; if (NULL == outputstr || NULL == inputstr) { return 0; } while (*pCurrent != '\0') { if (IS_FIGURE(*pCurrent)) { if (0 == currentLen) { pCurrentStart = pCurrent; } currentLen++; } else { if (currentLen > maxLen) { maxLen = currentLen; strncpy(outputstr, pCurrentStart, maxLen); } currentLen = 0; } pCurrent++; } return maxLen; } |
这篇关于2013.8.28的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!