C语言-函数

发布时间 2023-09-03 15:57:29作者: 扬帆去远航

函数

编写一个删除字符串中空格的函数

void del_space(char *p);
int main(int argc, char *argv[])
{
	char a[] = "  abd  dd ";
	puts(a);
	del_space(a);
	puts(a);

	return 0;
}

void del_space(char *p){

	char *q;
	q = p;

	while(*p){
		if(*p==' '){
			p++;
		}else{
			*q = *p;
			p++;
			q++;
		}
		*q= '\0';
	}
}

指针函数使用举例

  1. 错误演示
    • 局部变量运行在栈内存中,函数运行结束就回收内存
    • 野指针概念:指针变量中的值是非法的内存地址
      char * getstring();
      
      int main(int argc, char *argv[])
      {
              char * r;      
              r = getstring();
              printf("%p\n",r);
              printf("---%s---\n", getstring());
              puts(r);
              return 0;
      }
      
      char * getstring() 
      {
              // char str[20];// 错误写法(野指针),局部变量运行在栈内存中。函数结束就内存就回收了。
              // char str[20] = "welcome"; // 错误写法,同上。字符数组,可以修改。
              static char str[20]; // 正确
              // char * str = "welcome"; // 字符串常量,正确,但是不能修改。
              strcpy(str, "hello");
              printf("%p\n",str);
              return str;
      }
      // 运行结果
      // 0xbfab5fc8
      // 0xbfab5fc8
      // 0xbfab5fc8
      // ---`����V���l�ԅ�_��---
      
  2. 将输入的int类型的数字转换为字符串输出
    • 数组名就是地址
      char * itoa(char *p, int n);
      int main(int argc, char *argv[])
      {
              int n;
              char  s[50], * r;
      
              printf("input:");
            scanf("%d", &n);
      
            itoa(s, n);
            puts(s);
      
            return 0;
      }
      
      char * itoa(char *p, int n)
      {
            int r, i = 0, j;
      
            while (n) {
                    r = n % 10;
                    n /= 10;
                    p[i] = r + '0';
                    i++;
            }
            p[i] = '\0';
      
            j = i-1;
            i = 0;
      
            while (i < j) {
                    r = p[i];
                    p[i] = p[j];
                    p[j] = r;
                    i++;
                    j--;
            }
            return p;// 数组名就是地址
      }