C语言 指针 直接字符串变量前加*是什么怎么回事?没有提前定义啊

高分请分析下,C语言 指针 直接字符串变量前加*是什么怎么回事?没有提前定义啊?

#include<conio.h>
#include<stdio.h>
void fun(char * a)
{
}
void main ()
{
char s[80];

printf("Enter a string:\n");

gets(s);

fun(s);

printf("The string after deleted:\n")

puts(s);

}
二级C的一套程序设计题,就是不懂为什么变量前面直接加*,也没有定义。不懂是什么意思。
最新回答
快乐很简单

2024-10-17 20:44:37

加了*就表示这是指针(就是这个变量的存储地址,这是个char(字符)指针,就是只能存储字符类变量的地址)!这道题是传址调用, fun(s);就是把s[80]中的
字符串
的首地址传给形参a(这里a是字符型指针),之所以这样写,是为了让实参随着形参变而变!C语言:传值调用实参不能随着形参改变而改变,只有传址(地址)调用才能让实参随着形参改变而变!在C++里面和这差不多,但是C++里面引用也能让实参不能随着形参改变而改变!
有奶便是娘

2024-10-17 21:19:08

ps指向"this
is
a
book"的首地址,即第一个元素,但是指针有一个运算就是 加法运算,
ps
+
1
就是 ps的地址 + sizeof(char)
, 后面的sizeof(char)就是偏移地址,c++只所以提供指针的加法运算,这与汇编语言中的offset是一样的。 ps
=
ps
+
10;
就相当于 ps
+
sizeof(char)
*
10,就是加10个字符的地址,它的内容就是字符'b' 没事可以到0x30
百度贴吧 耍耍,这些都是很基础的东西哦。
盖世傻白甜

2024-10-17 12:35:10

void fun(char * a)

子函数里面不是定义了吗?为什么说没有定义?不理解你的意思

a就是一个*a这个指针指向的地址呀

fun(s); //这是把字符数组s[80]的地址传给子函数并通过子函数进行运算,这里的子函数什么也没有干,就是一个空函数

这个程序输入什么字符串,就输入什么字符串。和那个子函数没有关系,只是让你明白,函数的参数传递可以传递一个地址而已。

以上为个人见解,如有不对之处,欢迎大神指正!
痴人终久别

2024-10-17 08:28:34

是指“void fun(char * a)”这里吗?

这样定义是很正常的,基本上子函数的形参都这样定义
处理数组类的函数形参用指针比较方便,数组名即为数组首地址,传递首地址,即传递整个数组,因为数组在内存中是连续存储的。不会出现断点
追问
如果不加那个*会怎么样?会不会导致白搭?为什么?帮我详细说一下。我追加你悬赏。
追答
不定义为指针,就得一个一个传了,很麻烦
路遥归梦

2024-10-17 11:21:00

你是说fun函数的那个参数char *a 吗?
用在这里表示fun函数调用时需要的参数是一个char类型的指针,也就是地址,这里可以理解为这是一个定义,定义一个char类型的局部指针变量,如main函数里面调用时,fun(s)将字符串的初始地址传入fun函数。