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
字符),这将更加正确。