结构体
也称之为一种类型,就是长得复杂了一点,没有int看起来那么好看
用结构体定义的变量,他里面包含了结构体中所有的属性
当调用函数时时结构体的亚子,切忌不要再迷迷糊糊吧返回值整成函数名了,像普通函数一样再定义一个结构体类的变量用来承载类型就好了嘛[https://editor.csdn.net/md/?articleId=116171087]
自己看自己写过的这个题,s里包括最终结果的实部和虚部,直接返回一个s就好啦
是指针,调用函数的时候就要用给它呼应上,主函数内如果已经定义了可以不需要&,直接指针名字就可一,如果没定义,就一定要带上&和函数中的一起呼应上
链表
//*a a[]
//数组元素赋值需要&,元素之间不可以相互赋值
for(q=NULL,p=list.head;p;q=p,p=p->next){
if(p->value==number){
if(q){
q->next=p->next;
}else{
list.head=p->next;
}
free(p);
break;
}
//判断指针时出现在->的左边,要判断是否有足够的代码判断它是否时NULL
for(p=head;p;p=q){
q=p->next;
free(p);
}
return 0;
}
计算字符串长度
int max_len( char *s[], int n ){
int MAX=0;//长度用int即可
for(int i=0;i<n;i++){
if(strlen(s[i])>MAX)//忘记啦!!长度用strlen直接有了呀
MAX=strlen(s[i]);
}
return MAX;
}
杂七杂八
c语言的源程序从main函数开始,而不是第一句
C语言函数返回类型的默认定义类型是int。
029在C语言中是一个非法常量。 因为C语言中规定,以0开头的数字都是一个8进制的数字,而后面的数字为0~7,所以029是一个非法的常量。
处理的数字是负数一定一定要小心啊!!!!!!
&加不加
1.绝大多数情况下,数组名代表指针常量,这个指针常量指向数组首个元素。从数值上讲,数组名的值就是首个元素的地址。a[i]
2.再比如
char s[80];
scanf("%s",s); ——这里的 s 已是地址。
当然,写成 scanf("%s",&s[0] ); 也可以, &s[0] 是地址。
3.在 sizeof(数组名) 和 &数组名 这2种语境中,数组名并不是上面说的指针常量。 sizeof(数组名)返回整个数组的长度,而不是指针常量的长度。&数组名 的类型是一个指向整个数组的指针,而不是一个指向指针常量的指针。
原文:
————————————————
原文链接:https://blog.csdn.net/longintchar/article/details/80044077
指针数组的区别
指针是以地址作为值的变量,而数组名的值是一个固定的地址,可以把它看作是指针常量
a[i],这就是个确定的元素了,就得和别的一样样的,用&
p = p+1合法
a = a+1就不合法
输入输出
scanf遇空格和回车结束
printf遇到’\0’结束
gets(s)遇到回车结束
puts(s)遇到’\0’后自动转换成’\n’,即输出字符串后换行
getline()最省事儿的输入字符串的方式
int i = 010与int i = 10;的区别
前者是八进制的
010=8; 020=16;
搞不清楚的函数调用来啦~
#include<stdio.h>
void reverse(int *q)//他是自动匹配的,
//实参形参不需要名字相同
{
//n=n-10;
// return n;
*q=*q-10;
}
int main(){
int n=123;
int *p=&n;
// n=reverse(n);
reverse(p);//传指针,传的是地址,只穿名字
printf("%d",*p);
}
其实调用函数大概也就这几种了
1.普通函数,如果不返回return,那么它在函数里的生活是对主函数没有影响的
2.想要使函数的行为影响到主函数,就需要有返回,并且还需要在
主函数有一个变量去承载她的返回值
(言外之意就是只可以是一个变量被改变)
3.所以如果有很多值,甚至一串(数组啊啥的)那就需要用指针
了,指针不需要返回,主函数也不需要承载,直接条用一句就可以
控制全局了,需要注意的是,主函数传的是地址
宏
- 宏替换不占运行时间,只占编译时间;
2.而函数调用则占运行时间(分配单元、保留现场、值传递、返回),所以每次执行都要载入所以执行起来比较慢一些。
3.定义宏的时候不要在宏及其参数之间键入空格,因为宏替换的时候会把你不经意打的空格当作宏的一部分进去。
4.宏名没有数据类型,只是简单的字符替换。
二义性是什么呢?其实就是表述不清楚,导致模糊的影响。比如,用红墨水在纸上写下蓝字,那这个字是红字还是蓝字呢?这就成为二义性。总之,和想象中的有所差距就是二义了。
写代码时一定要卡边界,0啊,最大值啊,输入输出是否类型匹配啊,&符号,一定注意一下
static
不加static修饰,函数或者代码块中的变量在函数或者代码块执行完毕后就直接回收销毁了,每次执行都会重新分配内存,每次都会销毁。
1 1 1 1 1 1
加 static 修饰,函数或者代码块中的变量在函数或者代码块执行第一次初始化分配内存后,就算函数或者代码块执行完毕,该变量也不会被回收 销毁,直到程序结束 static 变量才会被回收。
1 2 3 4 5 6
循环时x不为0即为真命题,!x只要保证这个式子不是0,那么他就是真的
所以是先判断x是否为0,是0为假,不是0为真
然后再判断!x是 非假 还是 非真
最后 如果是假的式子,则结果为0,反之,结果为一
看清楚题,还能取余和除的商人家要啥都不知道呢!?
n-- :符号在后,那就是后递减,先参与运算
–n :符号在前,那就是先递减,后参数运算
函数调用可以作为一个函数的实参,但是不能作为形参