作者QQ29 (我爱阿蓉)
看板C_and_CPP
标题Re: [问题] 请教一些基本问题
时间Mon Sep 28 11:18:08 2009
※ 引述《kiminozo (Mr.Children-花火)》之铭言:
: 大家好,以下几题我有跑过程式
: 但却不知答案为何是如此,请各位帮我解惑,谢谢!!
: Q1.
: int a[5]={1,2,3,4,5};
: printf("%d",(a+1)[2]);
: Ans:4
: (a+1)[2]代表的是?
a原本指向1 现在a+1 所以指向2 然後以2这位址起始[0]=2 [1]=3 [2]=4
所以答案是4
: Q2.
: void foo(int b[][3])
: {
: ++b;
: b[1][1]=1;
: }
原本矩阵
123
++b所以 456 b[0][0]是4
789 现在把b[1][1]设1 改道原本8的位置
: int main(void)
: {
: int a[3][3]={ {1,2,3} , {4,5,6} , {7,8,9} };
: foo(a);
: printf("%d\n",a[1][1]);
: printf("%d\n",a[2][1]);
: }
: Ans: 5
: 1
: foo(a)这个副程式中发生了什麽事使得a矩阵数值改变?
印出来 原本8变成1
: Q3.
: void addsum(int *num)
: {
: int number = *num;
: printf("number=%d\n",(*num)++);
因为你是传入位址
*num得到100 因为++优先权低 所以先印出100
对他做++ 得到101 回到主程式
下次近来 number已经是101了 再做重复的事情
: }
: int main(void)
: {
: int i,number=100;
: for(i=0;i<N;i++)
: addsum(&number);
: }
: Ans: number=100
: number=101
: number=102
: for回圈中的&number不是都是指向同一个address吗
: 为何addsum副程式中number还是可以累加?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.207.187
1F:→ kiminozo:谢谢你的讲解^^ 09/28 14:04