《C和指针》学习笔记(一)

基本知识

  • 符号常量的名字一般用大写。
  • 一个NUL字节是指字节模式为全0的字节,即转义字符‘\0’,即ASCII码为0的字符。字符串是一串以NUL字节结尾的字符(不含NUL)。
  • goto语句适合用于跳出多层嵌套的循环。
  • 关系运算符(大于、小于、等于)产生的结果为整型值(0或1)。
  • 逻辑运算符(与、或)是短路运算符。
  • 如果同一条语句中调用了多个函数,这几个函数的调用顺序是不确定的,如果这些函数执行了I/O操作或修改了全局变量,则会产生错误的结果。
  • 数组名的值是一个指针常量。

可变参数的函数

下面是一个用于求任意个数字的最小值的函数。

#include <stdio.h>
#include <stdarg.h>
const int inf=0x7fffffff;

int min(int n,...)	//第一个参数n表示数字的个数 
{
	va_list p;	//变量p用于遍历 
	int ans=inf;
	va_start(p,n);	//将p指向第一个元素 
	for(int i=1;i<=n;i++)
	{
		int num=va_arg(p,int);	//调用va_arg,可以使p指向下一个元素 
		if(ans>num) ans=num;
	}
	va_end(p);
	return ans;
}
		
int main ()
{
    printf("%d\n",min(5,-3,4,5,2,1));	//调用函数时先输入数字个数 
    return 0;
}

关于指针

  • 声明时int* a,b,c;等价于int *a; int b,c;,正确写法是int *a,*b,*c;
  • 初始化时char *a=”hello”;相当于char *a; a=”hello”;
  • b=*p++;等价于b=*p; p++;
  • b=++*p;等价于b=++(*p); (后置自增运算符的优先级高于*)
  • b=*++p;等价于p++; b=*p;
  • b=++*++p;等价于b=++(*++p);
  • b=++*p++;等价于b=++(*p); p++;
  • (*a).b等价于a->b
#include <stdio.h>
int main()
{
	int a[10]={1,2,3,4,5,6,7,8},*p,b;
	p=a; 		//*p=a[0]=1
	p=a+1;		//*p=a[1]=2
	b=*p++;		//*p=a[2]=3,b=2
	b=++*p;		//*p=a[2]=4,b=4
	b=(*p)++;	//*p=a[2]=5,b=4
	b=*++p;		//*p=a[3]=4,b=4
	b=++*++p;	//*p=a[4]=6,b=6
	b=++*p++;	//*p=a[5]=6,b=7
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值