指针与一维数组,指针数组,数组指针。
代码:
// 指针与一维数组,指针数组,数组指针。
#include
int main(int argc, const char *argv[])
{
int arr[3] = {10, 20, 30}; //一维数组
// 指针与一维数组
// 使用指针指向数组的首地址 pa等价arr
int *pa = arr;
//使用指针遍历一维数组元素的两种方法
int n = sizeof(arr) / sizeof(int);
for (int i = 0; i < n; i++)
{
printf("下标%d: %d %d\n", i, pa[i], *(pa + i));
}
printf("-------------------------------------\n");
// 指针数组
// 指针类型的数组
int a = 5, b = 6, c = 7;
int *ptr[3] = {&a, &b, &c};
//遍历数组中每个元素所指向的变量的值
n = sizeof(ptr) / sizeof(int *);
for (int i = 0; i < n; i++)
{
printf("下标%d所指向变量的值为:%d %d\n", i, *ptr[i], **(ptr + i));
}
printf("-------------------------------------\n");
// 数组指针
// 指向整个数组的指针 *parr等价arr
int(*parr)[3] = &arr;
// 遍历指针所指向数组的每个元素
n = sizeof(*parr) / sizeof(int);
for (int i = 0; i < n; i++)
{
printf("下标%d: %d %d\n", i, (*parr)[i], *(*parr + i));
}
return 0;
}
运行结果:
用指针改写strlen strcpy。
代码:
// 用指针改写strlen strcpy
#include
int my_strlen(char *str)
{
int len = 0;
char *p = str;
while (*p++ != '\0')
{
len++;
}
return len;
}
char *my_strcpy(char *str1, char *str2)
{
char *p1 = str1, *p2 = str2;
while ((*p1++ = *p2++) != '\0')
;
return p1;
}
int main(int argc, const char *argv[])
{
char str1[] = "hello";
char str2[] = "world";
printf("my_strlen=%d\n", my_strlen(str1));
my_strcpy(str1, str2);
printf("%s\n", str1);
return 0;
}
运行结果: