宏定义和高级指针

宏的作用:是在预编译前替换
宏名的命名规范:1.纯大写 或者 k+驼峰 命名法 ;2.对于有参宏,宏名与参数之间不能加空格,每个参数加小括号 3:参数大写,每一个参数都要加上括号

例如

# define COUNT 20
# define kRandom(A, B)   arc4random( ) % (B - A + 1) + A
# define MUL(X, Y)    (X)*(Y)

函数的声明和实现

(声明的时候参数名可以省略,只给对应形参的类型)

//传值
void changeOfNums(int  ,int );
//函数定义(实现)
void changeOfNums(int x,int y ){
    int temp =x;
    x =y;
    y =temp;
    printf("%d %d \n",x,y);
}
//传地址
void changeOfPointer(int *,int *);
void changOfPointer(int *p1,int *p2){
    int tem = *p1;
    *p1 = *p2;
    *p2 = tem;
}

指针在使用时必备条件:1.要有明确的指向,2.指向的内存空间必须是可控的。

  COUNT;
    int  num  = kRandom(20, 40);
    printf ("%d\n", num);

    int  n = MUL (3 + 5,4);
    printf("%d\n",n);


    //错误写法1int*p = NULL;
    printf("%d",*p);

    //错误写法2int  *p = 0x10010100;
    *p = 10;

    //正确地写法
    int a =10;
    int *p = NULL;
    p = &a ;//&取址符

函数调用的两种传值方式:
1.传值:直接传递变量的数据。适用于在函数内部只想使用数据,并不想改变外部变量的数值场景

2.传址: 直接传递变量的地址。适用于在函数内部想修改外部变量的数值的场景

指针与字符串

// 双引号括起来的叫常量字符串,存储在常量区

char  str [] = "rainy";// 将常量区的字符串拷贝到栈区数组str中,
char *p2  =  str ;// P2指向的是栈区数组的首地址
//输出第一个字符
printf("%c\n",*p2);


strcpy(str, "sunny");//将str中的内容进行修改,因为str是在栈区,栈区内容可以修改
   printf("%s\n",p2);
//打印其中字符y
 printf("%c\n",*(p2+4) );   

char *p4 = “rainy”;//p4指向的是常量区的字符串,无法修改
//p4 = str1;
printf(“%c\n”,*p4);
//输出整个字符串
printf(“%s\n”,p4+2);//%s 输出的原理: 给定一个开始地址,从开始地址一个一个字符的输出,知道遇到\0结束.

//strcpy(p4, "sunny"); //修改常量区的字符串的内容,常量区的内容不可改变,程序崩溃  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值