<상황1>
#include <stdio.h>
#define MAX 258555
void main()
{
int a[MAX];
for (int i = 0; i < MAX; ++i)
{
a[i] = i;
printf("%d ", a[i]);
}
}
void main()
{
char name[iMax][10];
int kor[iMax], eng[iMax], mat[iMax], tot[iMax], rank[iMax], i, j;
float ave[iMax];
for(i = 0; i < iMax; ++i)
{
printf("이름 국어 영어 수학 순으로 입력하세요\n");
scanf("%s%d%d%d", name[i], &kor[i], &eng[i], &mat[i]);
tot[i] = kor[i] + eng[i] + mat[i];
ave[i] = tot[i] / 3.0f;
rank[i] = 1;
}
}
#include <stdlib.h>
#include <string.h>
{
int iMaxGuest = 3, iLenName = 4, i;
char **p=(char **)malloc(iMaxGuest*sizeof(char *));
for (i = 0;i < iMaxGuest;i++) {
p[i] = (char *)malloc(iLenName * sizeof(char));
}
strcpy(p[1], "Bob");
strcpy(p[2], "Tom");
for (i = 0;i < iMaxGuest;i++) {
printf("%s\n", *(p + i)); //printf("%s\n", p[i]);
}
free(*(p + i)); //free(p[i]);
}
free(p);
}
&p 100 |
1000 |
p |
1000 | 1004 | 1008 |
2000 | 3000 | 4000 |
*p p[0] | *(p+1) p[1] | *(p+2) p[2] |
2000 | 2001 | 2002 | 2003 |
N | e | o | \0 |
**p p[0][0] | *(*p+1) p[0][1] | *(*p+2) p[0][2] | *(*p+3) p[0][3] |
3000 | 3001 | 3002 | 3003 |
B | o | b | \0 |
**(p+1) p[1][0] | *(*(p+1)+1) p[1][1] | *(*(p+1)+2) p[1][2] | *(*(p+1)+3) p[1][3] |
4000 | 4001 | 4002 | 4003 |
T | o | m | \0 |
**(p+2) p[2][0] | *(*(p+2)+1) p[1][1] | *(*(p+2)+2) p[2][2] | *(*(p+2)+3) p[2][3] |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
int iMaxGuest = 3, iLenName = 4, i;
char **p=(char **)malloc(iMaxGuest*sizeof(char *));
for (i = 0;i < iMaxGuest;i++) {
p[i] = (char *)malloc(iLenName * sizeof(char));
}
strcpy(p[0], "Neo");
strcpy(p[1], "Bob");
strcpy(p[2], "Tom");
printf("&p = %p p = %p\n", &p, p);
for (i = 0;i < iMaxGuest;i++) {
printf("(p+%d):%p &p[%d]:%p *(p+%d):%p = %s\n",
i, p+i,
i, &p[i],
i, *(p + i),
*(p + i));
}
for (i = 0;i < iMaxGuest;i++) {
free(*(p + i)); //free(p[i]);
}
free(p);
}
#include <stdlib.h>
#include <string.h>
{
int i, iMaxGuest, iLenName;
char szName[1000];
scanf("%d", &iMaxGuest);
for (i = 0;i < iMaxGuest;i++) {
printf("고객명을 입력하세요\n");
scanf("%s", szName);
iLenName = strlen(szName) + 1;
p[i] = (char *)malloc(iLenName * sizeof(char));
strcpy(p[i], szName);
for (i = 0;i < iMaxGuest;i++)
{
printf("p[%d] = %s, size(%d)\n", i, p[i], strlen(p[i]));
}
for (i = 0;i < iMaxGuest;i++) {
free(p[i]);
}
free(p);
}
#include <stdlib.h>
void main()
{
int iMax;
printf("학생의 수를 입력하시오\n");
scanf("%d", &iMax);
int *eng = (int *)malloc(iMax*sizeof(int));
int *mat = (int *)malloc(iMax*sizeof(int));
int *tot = (int *)malloc(iMax*sizeof(int));
int *rank = (int *)malloc(iMax*sizeof(int));
float *ave = (float *)malloc(iMax*sizeof(float));
for(i = 0; i < iMax; ++i)
{
printf("이름 국어 영어 수학 순으로 입력하세요\n");
scanf("%s%d%d%d", name[i], &kor[i], &eng[i], &mat[i]);
tot[i] = kor[i] + eng[i] + mat[i];
ave[i] = tot[i] / 3.0f;
rank[i] = 1;
}
for (i = 0; i < iMax; ++i) // 자기 자신 i
{
for (j = 0; j < iMax; ++j)// 비교대상 다른사람 j
{
if (tot[i] < tot[j])
{
++rank[i];
}
}
}
{
for(i = 0; i < iMax; ++i)
{
if (ranking == rank[i])
{
printf("이름: %s kor(%d) eng(%d) mat(%d) tot(%d) ave(%.1f) rank(%d)\n",
name[i], kor[i], eng[i], mat[i], tot[i], ave[i], rank[i]);
}
}
}
free(kor);
free(eng);
free(mat);
free(tot);
free(ave);
free(rank);
}