我有以下代码片段:
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
printf("address of board : %p\n", &board);
printf("address of board[0] : %p\n", &board[0]);
Run Code Online (Sandbox Code Playgroud)
两个printf()语句都打印相同的值:0x0013ff67
据我所知,board(ie)数组名称代表第一个子数组的地址(即)board[0]和
board[0] 表示第一个数组中第一个元素的地址(即) board[0][0]
为什么我在所有printf()陈述中都得到相同的地址?我希望这两个语句都有不同的地址.
我对这些东西很新,并且不理解这种行为.请赐教.
这似乎应该很容易,但我花了太多时间.希望有人可以提供帮助.
char *labels[] = { "apple", "orange" }; // each items inside label is string literal. We can't change them-
Run Code Online (Sandbox Code Playgroud)
看下面的内容
char a[]="hi";
char b[]="hello";
char *name[]={a,b};//each item inside name is not string literal rite??
*name="bye";
puts(a);
Run Code Online (Sandbox Code Playgroud)
我认为输出将是bye因为我改变了a[]使用的内容*name="bye"
但产量仍然是hi.为什么?
以下两个代码片段编译时没有任何错误/警告,但在运行时崩溃.请赐教.
计划1
int main( )
{
char *p= "Hello" ;
*p = 'B' ;
printf("\n%s",p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划2
int main( )
{
char *p= "Hello" ;
Char *q="mug"
*q = *p ;
printf("\n%s",q);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于程序2,我预计输出为'Hug'.
看下面的程序
int main()
{
char p[3]="bug";
puts(p);
char *a=p;
puts(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于第一次投注,我得到正确的输出(即)"bug"
但是对于第二次投注,我输出为"bug↓"