下面,补充上次的程序,1完全使用指针的方法,.实现去掉空格
下面是程序示例:
#include<stdio.h>
#include<stdlib.h>
void delete_word(char* s) {
while (*(s + 1) != '\0') {
*s = *(s + 1);
s++;
}
*s = '\0'; // 设置字符串结束符
}
int main() {
char *a = (char *)malloc(128);
char ch;
int i = 0;
while ((ch = getchar()) != EOF) {
*(a + i++) = ch;
}
*(a + i) = '\0'; // 设置字符串结束符
char* begin = a;
while (*a != '\0') {
if (*a == ' ') {
delete_word(a);
}
else {
a++;
}
}
printf("%s\n", begin);
free(begin); // 释放内存
return 0;
}
2.指针和数组的关系
#include<stdio.h>
int main() {
int a[5] = { 1,2,3,4,5 };
int* b = a;
for (int i = 0; i < 5; i++) {
printf("%d ", *(b + i));
}
printf("\n");
return 0;
}
输出的结果:
1 2 3 4 5
3.指针和数组的运算关系
#include<stdio.h>
void f(int m[]) {
printf("%d\n", sizeof(m) / sizeof(m[0]));
}
int main() {
int m[10] = { 0 };
printf("%d\n", sizeof(m) / sizeof(m[0]));
f(m);
return 0;
}
输出的结果:
10
2
注解:
数组是一个完整的整体,可以看作一个长指针,
而单独的的指针为一个指针的大小,即:64位操作系统中8个字节,32位操作系统中4个字节
思维训练:
给你一段程序,预测会输出什么:
#include<stdio.h>
int main() {
int a[5] = { 1,2,3,4,5 };
int* p1 = (int*)(&a + 1);
int* p2 = (int*)((int)a + 1);
int* p3 = (int*)(a + 1);
printf("%d\n%d\n%d\n", p1[0], p2[0], p3[0]);
return 0;
}
注解(图解非常详细)
&a表示数字的地址
a表示数组首元素的地址
输出结果:
只有p3会正常输出2