1.
空指针和野指针
(1) 野指针
int* p; //p是野指针
*p = 20;//运行程序,报段错误
(2) 空指针
NULL 为了避免出现野指针,一个指针变量没有想好指向哪里的时候,先初始化NULL
2.值传递和地址传递
#include <stdio.h>
//值传递
void swap(int a, int b)//int a = a(main函数中的) int b = b;(main函数中的b)
{
int temp = a;
a = b;
b = temp;
}
int main(int argc, const char *argv[])
{
int a = 3, b = 5;
swap(a,b);
printf("a is %d b is %d\n",a,b);
return 0;
}
#include <stdio.h>
//地址传递
void swap(int* p, int* q)//int* p = &a; int * q = &b
{
int temp = *p; //因为p里面保存的是main函数中a的地址,所以*p代表的是main函数中的a
*p = *q;//因为q里面保存的是main函数中b的地址,所以*q代表的是main函数中的b
*q = temp;
}
int main(int argc, const char *argv[])
{
int a = 3, b = 5;
swap(&a,&b);
printf("a is %d b is %d\n",a,b);
return 0;
}
///值传递,通常改变不了参数的值, 就是把实参的值传递给形参,然后形参运算,跟实参没有任何关系
///地址传递,可以改变实参变
3.编写一个函数,完成下面功能,能将Hello World! 转换成Lipps Asvph!
#include <stdio.h>
#include <stdlib.h>
void changeLetter(char* p)
{
int i = 0;
while(p[i] != '\0')
{
if(p[i] >= 'a' && p[i] <= 'z')
{
p[i] += 4;
if(p[i] > 'z')
p[i] -= 26;
}
else if(p[i] >= 'A' && p[i] <= 'Z')
{
p[i] += 4;
if(p[i] > 'Z')
p[i] -= 26;
}
i++;
}
}
int main()
{
char a[] = "Hello World!";
changeLetter(a);
puts(a);
return 0;
}