@xxliixin1993
2015-12-12T23:31:04.000000Z
字数 1914
阅读 1697
C
指针就是储存器中某条数据的地址。
每声明一个变量,计算机就会在储存器中某个空间为他创建弓箭。如果在函数中声明变量,计算机就会把它保存在栈(Stack)的储存器区段中如果在函数之外的地方声明变量,计算机则会把它保存在存储器的全局段(Globals)。
int y=1;//全局量段
int main(){
int x=4;//栈 存储器地址例如4100 000, 值为4
return 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]# ./gameShip
lat:99
lon: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);//15
sizeof(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() 连接字符串