【初心者歓迎】C/C++室 Ver.29【環境依存OK】

このエントリーをはてなブックマークに追加
385デフォルトの名無しさん
このプログラムでtest1とtest2の違いは何ですか?
test1だとt[500]の配列が新たにスタックに作られるという
違いだけですか?

#include<stdio.h>
#include<stdlib.h>
void test1(int t[500]){
 printf("%d ",t[500-1]+1);
}
void test2(int *t){
 printf("%d ",t[500-1]+1);
}
void main(){
 int *t,i;
 t=(int *)malloc(sizeof(int)*500);
 for(i=0;i<500;i++)t[i]=i;
 test1(t);
 test2(t);
 free(t);
}
386デフォルトの名無しさん:2006/07/28(金) 00:00:01
387デフォルトの名無しさん:2006/07/28(金) 00:02:51
>>385
違いはない。同じ。
関数の仮引数の大きさは無視される。
388デフォルトの名無しさん:2006/07/28(金) 00:24:04
void test3(int t[]){
 printf("%d ",t[500-1]+1);
}
389デフォルトの名無しさん:2006/07/28(金) 00:27:22
#include<stdio.h>
#include<stdlib.h>
void test4(int (*t)[500]){
 printf("%d ",(*t)[500-1]+1);
}
void test5(int **t){
 printf("%d ",(*t)[500-1]+1);
}
void test6(int *t[]){
 printf("%d ",(*t)[500-1]+1);
}
void main(){
 int *t,i;
 t=(int *)malloc(sizeof(int)*500);
 for(i=0;i<500;i++)t[i]=i;
 test4(&t);
 test5(&t);
 test6(&t);
 free(t);
}
390デフォルトの名無しさん:2006/07/28(金) 00:30:20
#include<stdio.h>
#include<stdlib.h>
void test7(int (*t)[500]){
 printf("%d ",t[0][500-1]+1);
}
void test8(int **t){
 printf("%d ",t[0][500-1]+1);
}
void test9(int *t[]){
 printf("%d ",t[0][500-1]+1);
}
void main(){
 int *t,i;
 t=(int *)malloc(sizeof(int)*500);
 for(i=0;i<500;i++)t[i]=i;
 test7(&t);
 test8(&t);
 test9(&t);
 free(t);
}
391デフォルトの名無しさん:2006/07/28(金) 00:35:33
#include<stdio.h>
#include<stdlib.h>
void testA(int (*t)[500]){
 printf("%d ",(*(t+1))[500-1]+1);
}
void testB(int **t){
 printf("%d ",(*(t+1))[500-1]+1);
}
void testC(int *t[]){
 printf("%d ",(*(t+1))[500-1]+1);
}
void main(){
 int (*t)[500],i;
 t=(int (*)[500])malloc(sizeof(int [500])*2);
 for(i=0;i<500;i++){t[0][i]=i;t[1][i]=i+500;}
 testA(t);
 testB(t);
 testC(t);
 free(t);
}