주소 + 주소 = 주소 + (정수 * 주소를 구한 변수의 크기)
sizeof 연산의 결과가 다르다.
배열명에 사용하면 배열 전체의 크기를 구하고, 포인터에 사용하면 포인터 하나의 크기를 구한다. 고로, 배열명을 포인터에 저장함녀 배열 전체의 크기를 확인할 수 없게 된다.
변수와 상수의 차이가 있습니다.
포인터는 그 값을 바꿀 수 있지만, 배열명은 상수이므로 값을 바꿀 수 없다.
printf("%d", pa[0]);
printf("%d", *(pa + 0));
printf("%d", *pa);
#include <stdio.h>
int main(void)
{
int ary[5] = {10,20,30,40,50};
int *pa = ary;
int *pb = pa + 3;
printf("pa : %p\n", pa);
printf("pb : %p\n", pb);
pa++;
printf("pb - pa: %ld\n", pb - pa);
printf("앞에 있는 배열 요소의 값 출력: ");
if (pa < pb)
printf("%d\n", *pa);
else
printf("%d\n", *pb);
return (0);
}
#include <unistd.h>
int my_getchar(void)
{
char c;
int bytesRead;
bytesRead = read(0, &c, 1);
if (bytesRead == 0)
{
return -1; // Return -1 as EOF
}
return (unsigned char)c;
}
EOF(End Of File)
- 일반적으로 -1로 정의
- 파일의 끝을 표현하기 위해 정의해놓은 상수
void ft_putchar(char c)
{
wrtie(1, &c, 1);
}
char *ft_strcpy(char *dest, char *src)
// dest: 복사 받을 곳
// src : 복사할 내용
{
char *origin;
origin = dest;
while (*src != '\0')
{
*dest = *src;
src++;
dest++;
}
*dest = '\0';
return (origin);
}
char *ft_strncpy(char *dest, char *src, unsigned int n)
{
char *origin;
origin = dest;
while (0 < n && *src != '\0')
{
*dest = *src;
src++;
dest++;
n--;
}
while (0 < n)
{
*dest = '\0';
dest++;
n--;
}
return origin;
}
char *ft_strcat(char *dest, char *src)
{
char *temp;
temp = dest;
while(*temp != '\0')
{
temp++; // 포인터 끝으로 이동 '\0'위치 도달
}
while(*src != '\0')
{
*temp = *src;
temp++;
src++;
}
*temp = '\0';
return (dest);
}
char *ft_strncat(char *dest, char *src, unsigned int nb)
{
unsigned int i;
char *temp;
temp = dest;
i = 0;
while (*temp)
temp++;
while (i < nb && *src != '\0')
{
*temp = *src;
temp++;
src++;
i++;
}
*temp = '\0';
return (dest);
}
size_t ft_strlen(const char *str)
{
size_t len = 0;
while (str[len])
len++;
return len;
}
int ft_strcmp(const char *s1, const char *s2)
{
while(*s1 != '\0' && *s2 != '\0')
{
if (*s1 != *s2)
return *s1 - *s2;
else
{
s1++;
s2++;
}
}
return (*s1 - *s2);
}
int ft_strncmp(const char *s1, const char *s2, unsigned int n)
{
unsigned int i;
i = 0;
if (n == 0)
return 0;
i = 0;
while ((i < n) && (*s1 != '\0' || *s2 != '\0'))
{
if (*s1 != *s2)
return (*s1 - *s2);
s1++;
s2++;
i++;
}
return 0;
}