C 指针作为参数

C 指针作为参数,c,arrays,string,pointers,C,Arrays,String,Pointers,如果您有一个简单的函数,例如intopen(constchar*path,intoflags)您可以直接将字符串作为*path传递,例如“filename.txt。您还可以传递&foo(这是一个地址,在这种情况下可能没有意义)。您甚至可以在其中放置一个普通指针 所以我的问题是,当你有一个指针作为参数时,实际上是一个地址,还是一个符合参数的数据(在这个例子中是常量char) Thx.它需要一个指针。一个字符串常量,例如“filename.txt“,实际上有一个指针值:创建一个数组来保存字符串,表达

如果您有一个简单的函数,例如
intopen(constchar*path,intoflags)
您可以直接将字符串作为
*path
传递,例如
“filename.txt
。您还可以传递
&foo
(这是一个地址,在这种情况下可能没有意义)。您甚至可以在其中放置一个普通指针

所以我的问题是,当你有一个指针作为参数时,实际上是一个地址,还是一个符合参数的数据(在这个例子中是
常量char


Thx.

它需要一个指针。一个字符串常量,例如
“filename.txt“
,实际上有一个指针值:创建一个数组来保存字符串,表达式的值是该数组的地址,即指向该数组的指针。

您的示例是有效的,因为在C中,指向数组的指针指向数组的第一个元素。例如,在此代码段中

int-arr[3]={1,2,3}

整数和

int SumOfArrayElements(int*a)

{

/*

计算总和的代码

*/

}

总和=总面积(arr)

arr
是指向数组的指针,指向
arr[0]


C中的字符串是字符数组(即字符串和字符数组之间没有区别)。因此,当您传递
“filename.txt”
时,编译器将其作为字符数组指针读取,该指针指向
“filename.txt”

您直接传递字符串文本。这意味着您正在传递该
常量char
array.ah的地址,所以如果您创建“This is a strin”,它将在系统中为其创建一个char数组?谢谢,没错。您可以将其视为一个匿名
char
数组。它通常分配在只读内存中,因此您不能修改它的内容,但除此之外,它就像一个
char[]
。更正确的说法是字符串文本的类型是
const char[]
,当它被传递到
open
@szczurcio时,它隐式地退化为一个指针。指出字符串文本的类型是
char[n]
,其中n是字符串的长度+1。是的,数组的长度是字符串的长度加1(对于终止的
\0
字符),这将更加正确。