1 scanf、printf是stdio.h头文件中定义的两个函数。
#include "stdio.h"; #include "stdlib.h"; void main(void){ char nick[10]; // 字符数组 int year; scanf("%s %d",&nick,&year); // &取地址 printf("Hello %s %d ",nick,year); }
2 指针的值是内存单元的地址(数值)。
int *p定义了一个指向整形变量的指针, char *p定义了一个指向字符型变量的指针。
&是取地址,*是取值。
#include "stdio.h"; #include "stdlib.h"; void main(void){ int a = 123,*p = &a; char c = 'c',*pp = &c; printf("%p ",p); // 打印十六进制的地址 printf("%d ",*p); // 打印指针对应的变量 printf("%p ",pp); // 打印十六进制的地址 printf("%c ",*pp); // 打印指针对应的变量 }
3 指针可以常量,也可以是变量。
数组名是指针常量,不能修改。
指针变量可以修改,例如可以进行++或--运算,指向后一个或前一个变量。
#include <stdio.h>; #include <stdlib.h>; void main(void){ // 数组名是指针常量,不能修改 char man[] = "Jack Doson"; printf("%s",man); // 定义指针变量,可以修改 char letter = 'a'; char *c = &letter; // 指向字符型变量 printf("%c ",letter); printf("%c ",*c); char *str = "Leo"; // 指向字符数组的第一个成员 printf("%c ",*str); str++; printf("%c ",*str); }
4 指针可以指向字符串常量,也可以指向字符数组。
#include <stdio.h>; #include <stdlib.h>; void main(void){ char *dog = "dog"; // 指针变量指向一个字符串常量 // *dog = 'l'; // 报错 char c[] = "dog"; // 指针常量指向一个字符串数组 printf("%s ",c); *c = 'l'; printf("%s ",c); }