以下是我的代码:
func playRemoteFile() {
let fileUrl = "http://www.foo.com/bar.mp3"
let url = NSURL(string: fileUrl)
var myPlayer = AVPlayer(URL: url)
myPlayer.play()
}
运行上面的代码给出输出:
#include <stdio.h>
int main()
{
char a[10]="Hi!";
void f(char b[])
{
// 1. printf("*a is:%s\n",*a);
printf("&a is:%p\n",&a);
// 2. printf("&&a is:%p\n",&(&a));
printf("a's address is:%p\n",a);
printf("a's value is:%s\n",a);
printf("b's address is:%p\n",b);
printf("b's value is:%s\n",b);
// 3. printf("*b is:%s\n",*b);
printf("&b is:%s\n",&b);
}
f(a);
return 1;
getch();
}
在输出中:
为什么&a is:0028FF1C
a's address is:0028FF1C
a's value is:Hi!
b's address is:0028FF1C
b's value is:Hi!
&b is:∟ (
和&a
有不同的输出;
虽然a和b有相同的参考。
此外,
我已经通过他们的电话号码提到了3条评论。 如果我逐个删除斜线并执行它们,我会遇到以下两个问题:
执行评论号。 1&amp; 3:
&b
执行评论号。 2:
"abc.exe has stopped working."
答案 0 :(得分:4)
第1点: Nested functions are not standard C
. They are supported as GCC extension. 。
第2点: string[] A = {"1","2","3","4","5"};
int index = 3;
var result = A.Take(index + 1)
.Concat(Enumerable.Repeat("", 10 - A.Length))
.Concat(A.Skip(index+1))
.ToArray();
错误并调用UB,原因是格式说明符不正确。您需要将其更改为
printf("&b is:%s\n",&b);
第3点: printf("&b is:%p\n",(void *)&b);
错误。 &(&a)
的操作数需要是左值,而不是另一个地址,它不是左值。
相关:&
,章节C11
,操作数类型
一元
§6.5.3.2
运算符的操作数应该是函数指示符,&
或一元[]
运算符的结果,或者是指定不是对象的对象的左值位字段,不使用寄存器存储类说明符声明。
和返回类型
....结果不是左值。
答案 1 :(得分:0)
您复制粘贴了printf()
并且没有更改说明符
printf("&b is:%s\n", &b)
/* ^ should be `p' */
第一条注释在执行时会导致问题,因为您正在使用"%s"
说明符并传递将被解释为地址的a
的第一个字符,请尝试此
printf("*a is: %c\n", *a);
第三条评论提出了同样的问题。
第二条评论,你需要一个中间指针来做这件事,比如
char *c = &a;
char **d = &c;
printf("%p\n", (void *) d);
虽然它将打印与printf("%p\n", (void *) a);
相同,因为它们都具有相同的地址,但不同之处在于指针算法的工作方式不同。
答案 2 :(得分:0)
好吧,你不应该在另一个函数中定义函数 - 虽然有些编译器接受它(比如gcc
),但它不可移植。
printf("&b is:%s\n",&b);
此处&b
是b
的地址,它是char数组的地址。实际上&amp; b是参数的地址。
1。)和3.)失败,因为您需要将指针传递给字符串。 * a,是一个解除引用的指针,因此,实际上,它是字符串的第一个字符
2。)&amp;&amp; a是指向指向指针的指针的指针(因为a
已经是指针。
答案 3 :(得分:0)
注意:这是作者自己的答案,请参阅revision 3
我理解上述问题,这是改进的代码:
#include<stdio.h>
#include<string.h>
int i;
char a[11]="F*** Yeahh!"; //String : char *
//'a' gets memory in "globals" area;'a' is a pointer to 'F'
void func();//Function Definition
int main()
{
func(a); //Passing reference of 'a' to func
getch();
return 1;
}
void func(char b[])
//'b' is given memory in 'stack' region;'b' has a reference
// to 'a' which in turn refer to 'F'
{
printf("*a is:%c\n",*a);
printf("&a is:%p\n",&a);
//printf("&&a is:%p\n",&(&a));//&()...Inside braces,there must be a
// value..
printf("a's address is:%p\n",a);
printf("a's value is:%s\n",a);
printf("b's address is:%p\n",b);
printf("b's value is:%s\n",b);
printf("*b is:%c\n",*b);
printf("&b is:%p\n",&b);
for(i=0;i<strlen(a);i++)
printf("String as an array of characters is:%c\n",b[i]);
}
这是输出:
*a is:F
&a is:00409000
a's address is:00409000
a's value is:F*** Yeahh!
b's address is:00409000
b's value is:F*** Yeahh!
*b is:F
&b is:0028FF20
String as an array of characters is:F
String as an array of characters is:*
String as an array of characters is:*
String as an array of characters is:*
String as an array of characters is:
String as an array of characters is:Y
String as an array of characters is:e
String as an array of characters is:a
String as an array of characters is:h
String as an array of characters is:h
String as an array of characters is:!