1、当使用const关键字变量就无法修改可当常量来用。常量指针不能通过指针来改变变量的值,但可以通过其他引用来改变变量的值常量指针也可以指向其他变量地址,如
int a=5,b=6;
const int *pt = &a;
*pt=6; //错误
a=6; //正确
pt=&b; //正确
指针常量指向的地址不能改变,但可以改变变量的值,如
int a=3;
int b=4;
int *const arr=&a;
arr=&b //错误
*arr = 4; //正确
2、
int *arr[3]; //三个int型的指针组成的数组,相当于int *arr1, int *arr2, int *arr3组成一个数组
char *arr[3]={“abc”, “1234”,”adfdf”}; //三个char型的指针组成的数组,相当于char *arr1, char *arr2, char *arr3组成一个数组
3、gets(地址)输入字符串函数,把回车变为\0字符
puts(地址或者字符串”abc”)输出字符串函数,遇到’\0’字符输出,末尾自动加\n
4、
易错
char *ch = "12abc";
Printf("%s",ch); //12abc
Printf("%s", *ch); //错误,不能把一个字符用字符串的形式输出
Printf("%c",*ch); //1
Printf("%c", *(ch+1)); //2
Printf("%c",ch[2]); //a
5、在输出的时候想要引用双引号,可在双引号前加\,如printf(“\”123\””);
6、左值不可修改表示赋予左值得那个变量不可修改,即左值右边的东西不可修改
7、static关键字修饰全局变量的时候,这个全局变量只能在本文件中访问,其他文件不可访问,就算有extern外部声明也不行。
static修饰一个函数的时候这个函数只能在本文件中使用,不能被其他的文件调用
static修饰局部变量的时候,在整个程序没有运行结束,值不会被销毁
#include <stdio.h>
static int n; //定义静态全局变量
int fun1()
{
static int m=0; //定义静态举局部变量
m++;
return m;
}
int fun2()
{
n=0;
n++;
return n;
}
void main()
{
int i;
for(i=0;i<5;i++)
{
Printf(“%d %d\n”fun1(),fun2()); //m为静态局部变量,这个函数运行结束,静态变量的值不会被销毁,函数下次使用时仍能使用,每次调用函数遇到静态定义程序都会忽略这条,直接走到m++;
//n为静态全局变量,作用仅限于变量被定义的文件,每次调用函数都会n=0;
}
}
输出:
1 1
2 1
3 1
4 1
5 1
8、
头文件string.h的函数,对字符串操作
strlen()测量字符串长度,结尾的空字符’\0’不包括进去
strcat(地址a,地址b)字符串拼接,把b拼接到a上
Strncat(地址a,地址b,长度)把b字符串拼接到a上,拼接多少由长度控制
Strcmp(地址或字符串,地址或字符串)字符串的比较。不可以是字符,两字符串比较相同返回0(假),不同返回非0(真)(如果前者排在ascii码前面返回-1,否则返回1,如strcmp(“a”,”b”)返回-1)。
需要注意的是:
char try[10];
gets(try);
while(try != “abc”)
{
puts(“字符串不相等”);
gets(try);
}
try实际上是个指针,拿一个指针地址和字符串比较永远不会相等,就永远走不出循环。
strncmp(地址或字符串,地址或字符串,长度)这里的长度来决定比较前多少个字符串
strcpy(地址或字符串,地址或字符串)字符串拷贝,把第二个字符串拷贝到第一个字符串上面,第二个字符串的结尾符’\0’也会拷进来,函数读到空字符结束。strcpy(arr2+4,arr1)表示从arr2开始往后数4个字符开始复制,如:
char *arr1=”abc”;
char arr2[] = “12345678”;
strcpy(arr2+4,arr1);
puts(arr2); //1234abc
strncpy(地址或字符串,地址或字符串,长度)表示把后一个字符串截取多少长度拷贝到第一个字符串里,如:
Char *arr1=”abc”;
Char arr2[] = “12345678”;
strncpy(arr2,arr1,2); //ab345678
9、
char arr[3][3]表示有三行,每行有三个字符组成的数组,也可以表示,有三行每行存有一个字符不超过三的字符串
for(int i=0;i<3;i++)
gets(arr[i]); //对每行写入一个字符串
10、
printf()用法和printf差不多,printf把东西打印到屏幕上,而sprintf把东西打印到字符串里,如:
char *arr=”abc”;
float a=3.14f;
char ch=’A’;
char arr1[50];
sprintf(arr1,”字符串:%s 浮点数:%.2f 字符:%c”, arr,a,ch);
puts(arr1); //字符串:abc 浮点数:3.14 字符:A