随笔分类 - C语言
摘要:我们可能会经常写出这样的代码:int add(int a , int b){ return a + b;}当然,这是合理的写法,使函数的返回值为 int ,所以,调用函数后会返回一个int型的值。今天,我想讨论的问题当然不是这个,请看下面这段代码:char* Func_1(void){ char str[30] = "Bruce"; cout#includeusingnamespacestd;constchar*testValue="BruceZhang";chargstr[30]={0};char*Func_1(void);char*Func_2(vo
阅读全文
摘要:程序一:char* toStr() { char *s = "abcdefghijkl"; return s;}int main(){ cout void main(){char a = 1;char c[] = "1234567890";char *p ="1234567890";a = c[1];a = p[1];return;}对应的汇编代码10: a = c[1];00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]0040106A 88 4D FC mov byte ptr [ebp-4],
阅读全文
摘要:int main(){ char *p2 = "lmj"; *p2 = 'L'; printf("%s", p2); return 0;}程序运行结果:段错误看起来似乎是可行的,但这是错误代码,错在第2行。首先看第1行,指针变量p2指向的是一块字符串常量,正因为是常量,所以它内部的字符是不允许修改的。有人可能搞蒙了,这里的第1行代码char *p2 = "lmj";跟第一种方案中的第2行代码char a[] = "lmj";不是一样的么?这是不一样的。char a[] = "lmj&quo
阅读全文
摘要:1、strlen():计算的是字符数,不包含‘\0’。一个中文占3个字符2、'\0'是一个ASCII码值为0的字符3、char *p; *p = 10;这是错误的做法,应该在指针确定指向的变量后,再进行相应的操作。4、grub-md5-crypt xxx 生成md5密码
阅读全文
摘要:>#ifndef _DEBUG_H_#define _DEBUG_H_#include #include #include #define ERRBUFLEN 1024#ifdef DEBUG_ON#define ERR_PRINT(str) \ do \ { \ char errbuf[ERRBUFLEN] = { '\0' }; \ snprintf(errbuf, ERRBUFLEN, "[file %s line: %d] %s", __FILE__, __LINE__, str); \ fprintf(stderr, "\033[3
阅读全文
摘要:1.一个指针变量占用多少个字节的内存空间?占用的空间是否会跟随所指向变量的类型而改变?在同一种编译器环境下,一个指针变量所占用的内存空间是固定的。比如,在16位编译器环境下,任何一个指针变量都只占用2个字节,并不会随所指向变量的类型而改变。2.既然每个指针变量所占用的内存空间是一样的,而且存储的都是地址,为何指针变量还要分类型?而且只能指向一种类型的变量?比如指向int类型的指针、指向char类型的指针。其实,我觉得这个问题跟"数组为什么要分类型"是一样的。根据变量的定义顺序,这些变量在内存中大致如下图排布:其中,指针变量p和int类型变量i各占2个字节,char类型的c占
阅读全文
摘要:字符串转换为整数:int myatoi(char *src){ char flag = 0; int sum = 0; int i = 0; int len = strlen(src); if ( NULL == src){ return 0; } if ( src[i] == '-'){ flag = '-'; ++i; } for ( ; i 57){ return p; } /*数据求和,注意数值的转换问题stc[i] - 48*/ sum = sum * 10 + src[i] - 48...
阅读全文
摘要:普通程序员:void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp;}文艺程序员void swap(int &a, int &b){ a = a^b; b = a^b; a = a^b;}2B程序员void swap(int a, int b){ int temp; temp = a; a = b; b = temp;}
阅读全文
摘要:/*************************c语言栈低为高地址,栈顶为低地址。函数参数的入栈顺序为从右至左。***************************/关于栈:首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址--->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的CPU而言,example:void fun(int x, int y, int z){ printf("%d in address [%x]",x, &x); printf("%d in addr
阅读全文