@xxliixin1993
2015-12-12T15:31:04.000000Z
字数 1914
阅读 2275
C
指针就是储存器中某条数据的地址。
每声明一个变量,计算机就会在储存器中某个空间为他创建弓箭。如果在函数中声明变量,计算机就会把它保存在栈(Stack)的储存器区段中如果在函数之外的地方声明变量,计算机则会把它保存在存储器的全局段(Globals)。
int y=1;//全局量段int main(){int x=4;//栈 存储器地址例如4100 000, 值为4return 0;}
想知道存储器地址,要用&
printf('x的指针是%p', &x);//%p使用来格式化地址的,输出16进制输出 0x3E8FA0
&变量 是取这个数据的指针
*指针 是取这个指针的数据
例:
#include <stdio.h>void goSouthEast(int* lat,int* lon){*lat=(*lat)--;*lon=(*lon)--;}int main(){int lat=100;int lon=10;goSouthEast(&lat,&lon);printf("lat:%i\nlon:%i\n", lat,lon);return 0;}[root@www C]# gcc gameShip.c -o gameShip[root@www C]# ./gameShiplat:99lon:10
当传字符串的时候,其实传递的是字符串数组指针:
void function_test(char msg[]){printf("echo %s",msg);}char msg[] = "hellow wolrd";function_test(msg);
注意:
char s[] = "how big is it?";char *t = s;sizeof(s);//15sizeof(t);//32位4,64位8*s == s[0]s[i] == *(s+i)
fgets函数
例如:
#include <stdio.h>int main(){char sayChar[9];printf("input\n");//接收缓存区的指针,接收字符串大小包括\o,stdin表示数据来自键盘fgets(sayChar,sizeof(sayChar),stdin);printf("output:%s\n", sayChar);return 0;}
注意:如果sayChar是指针就不能用sizeof,要显式指定长度。
例如
char sayChar[]='test';
fgets(sayChar,5,stdin);
| a | b | c | \0 |
|---|---|---|---|
| s[0] | s[1] | s[2] | s[3] |
stdio.h这个库里包含标准输入输出的函数
string.h这个库里包含关于字符串的处理的函数
# include <stdio.h># include <string.h>//第一个[]编译器会知道你有3个字符串,所以可以不指定;第二个也可以,但是那样编译器会分配大量的空间,所以这个song数组就占用了3*6=18个字符char song[][6]={"qwe","asd","zxc"};void search(char input_string[]){int i;for(i=0;i<=2;i++){if(strstr(song[i],input_string)){printf("have song %s\n",song[i]);}}}int main(){char input_string[6];printf("input song name\n");fgets(input_string,sizeof(input_string),stdin);input_string[strlen(input_string)-1]='\0';search(input_string);return 0;}
注意:
1. 当一个函数要调用另一个函数时,被调用函数一定要写在调用函数之前。
2. strstr() 在字符串里查找字符串
3. strchr() 在字符串里查找字符
4. strcmp() 比较字符串
5. strcpy() 复制字符串
6. strlen() 返回字符串长度
7. strcat() 连接字符串