C参数问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 18:38:26
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>

void fun(char xx[]) //前面加$的函数
{
char *p,*q;
int len,j=0;

len=strlen(xx);
p=xx;
q=xx+len;
while(*p!=EOF){
if(*p>='0'&&*p<='9'){
while(q!=p){*q=*(q-1);--q;}
j++;
*(p+1)=*p;
*p='$';
p++;
q=xx+len+j;
*q='\0';
}
p++;
}
}

int main()
{
char *a;
int len,j=0;
a=(char *)malloc(sizeof(char)); //这里申请动态内存不是一个char1个字节的空间吗?为什么能输入字符串?数组申请动态内存是怎样申请的?
printf("输入原始字符串:\n");
gets(a);
fun(a); //这里指针a能做为实参传给void fun(char xx[])的xx[] 为什么?是因为地址值相同吗?
printf("转换后字符串:%s",a);
getch();
return 0;
}

1. a=(char *)malloc(sizeof(char)); //这里申请动态内存不是一个char1个字节的空间吗?为什么能输入字符串?数组申请动态内存是怎样申请的?
2. fun(a); //这里指针a能做为实参传给vo

1. a=(char *)malloc(sizeof(char)); //这里申请动态内存不是一个char1个字节的空间吗?为什么能输入字符串?数组申请动态内存是怎样申请的?
答:
这里申请动态内存是一个字节的空间,sizeof(char)=1啊
能输入字符串,并不奇怪,是因为gets()等输入函数不够严格
数组占用的内存是静态的,动态申请的内存,可以当成数组进行操作

2. fun(a); //这里指针a能做为实参传给void fun(char xx[])的xx[] 为什么?是因为地址值相同吗?
答:
a是个地址,修改了这个地址里面的内容,所以能传递进去,也能传递回来

3. 不需要释放内存空间吗?
答:
动态申请了内存,需要释放的。
如果定义的是数组,则不需要释放

1.
申请的是一个char 的空间,但是函数返回的是一个void*的指针,强制转换成char*指针.所以可以指向字符串.但是用法不严谨.
2.
a是char*的指针,char xx[]也是char*的指针,所以可以用a做参数.
数组名就是指向数组元素类型的指针.

指针就是地址

3.
内存申请了,应该要释放,但这的重点不是考察这个,没释放可以原谅.