没有用的函数

来源:百度知道 编辑:UC知道 时间:2024/06/08 22:44:36
#include <stdio.h>
int *reversi(int *s);

void main()
{
int s[] = {1,2,3,4,5,6,7,8,9,};
reversi(s);
printf("%d\n", s[2]);
}

int *reversi(int s[])
{
int i = 0;
int j = sizeof(s) / sizeof(int) - 1;
int tmp;

while (i < j){
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
i++;
j--;
}
return s;
}结果输出的是3,s中元素并没有倒置,为什么?
为什么字符数组做参数时可以!

数组长度信息只保留在分配它的函数的栈上。你在main里调用sizeof(s)/sizeof(int)可以得到9,但在reversi里调用sizeof(s)/sizeof(int)得到的是1。设计函数的时候,地址连同长度请一起传递。

int j = sizeof(s) / sizeof(int) - 1;
你先看看这句话的j的值是多少!

#include <stdio.h>
#include <string.h>
reverse(char* s)
{
int i = 0;
int j = strlen(s) - 1;
char tmp;
while (i < j){
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
i++;
j--;
}
}
int main()
{
char a[] = "123456789";
reverse(a);
printf("%c\n",a[2]);
return 0;
}