C语言知识点

指针的知识点

1.int p = a;
表地址:&a[i], &p[i], a+i, p+i.
表实值:
(a+i), *(p+i), a[i], p[i].
2.二位数组的地址表示为:a[i]+j, (a+i)+j
表实值:
(a[i]+j), ((a+i)+j), a[i][j]
int *p; p=a[0];即指向第一个元素
int *p; p=a[0][0];指向第一个元素,且按行列顺序依次排入p中(即在指针p中是一维排列的)。
3.字符char s做指针
char *p=s
或char *p; p =&s
4.字符串char s1[50]用首字母做指针:
char *ps1 = s1
或char *ps1;ps1=&s1[0];
或char *ps1;ps1=s1;
5.基本变量作为形参时,若在函数内修改形参的值,对应的实参不会改变。

void add(int a){
a++;//不会改变a的值
}

6.指针作为形参能够修改实参,指针作为函数的形式参数时:

  • 若在函数内修改了指针指向的值(*a),则会影响实际参数的值(必须加星号修改)。如:
void add(int *a){
(*a)++;
}//会改变a指向的实际值
  • 但若在函数内仅修改了形式参数的存储地址,则不会改变实际参数的地址。如:
void swap(int *a,int *b){
int *t;
t=a;
a=b;
b=t;
}//不会完成swap功能。

7.一个函数的表示为void fun(*a,*b)时,若传进来的变量需要变为指针类型:
如两个实际变量为int aa, int bb。则传进来需加地址变为fun(&aa,&bb);
如两个实际变量为int *aa, int *bb。则传进来直接为fun(aa,bb);

8.指向结构体的指针,必须从一个相同的结构体对象取地址才能放入一个函数的指针参数。或直接取结构体对象地址作为指针。

void fun(struct_ack *struct_example)
{}
struct_ack *ptr;
struct_ack entity;
ptr = &entity;
fun(ptr)//需将指针指向一个实体
//或fun(&entity);

若不指向实体就入参,可能会报错。

字符串知识点

1.gets与scanf相同点:都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。不同点:scanf在输入过程中碰到空格时系统认为输入结束,并将空格之前回的字符作为有效字符存入数组中,并在尾部追加\0作为结束标志。利用gets时,空格符被看作是有效字符,也就是说只有碰到回车符时系统才认为输入结束。
2.字符串一般以’\0’结尾,利用指针是否等于’\0’可以判断字符串是否结尾。

字节知识点

一个字节占8位比特。在不同操作系统中字符类型对应的字节数如下:
在这里插入图片描述

C语言位运算知识点

1.计算a%b,当b= 2 n 2^n 2n时,可以替换为:
a % b = a & (b-1)
例:14%8,取余数,14为1110,8为1000,相当于要得到110,即6。因此8-1=7的二进制位0111,和1110按位与得到110,即为6,即6=14%8。(此公式只适用b=2n,是因为可以保证b始终只有最高位为1,其他二进制位全部为0,减去1,之后,可以把高位1消除,其他位都为1,而与1做&运算,会保留原来的数。)

结构体知识点

1.结构体变量为指针时,引用内部变量为“->”;结构体变量不为指针时,引用内部变量为“.”。

变量作用域

1.局部变量:在函数内部定义的变量为局部变量,作用域仅限于函数内部,离开函数就是无效的。main函数定义的变量也是局部变量。
2.全局变量:在所有函数外部定义的变量称为全局变量,作用域为整个程序,包含了所有的源文件,包括所有.c,.h文件。如果给全局变量加上static关键字,他的作用域就变成了当前文件,在其他文件中就无效了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值