指针、数组、字符串的联系

#include “stdio.h“:在当前目录和系统指定的目录中找该文件。

#include  <stdio.h> :在由系统指定的文件目录中找该文件。宏函数:

  1 #include <stdio.h>
  2 #define OUT printf("wddv587!\n") //无参数宏函数
  3 #define P(s) printf("%s\n",s)    //有参数宏函数
  4 #define SQR(x) x*x                    //写宏函数多加括号
  5 
  6 int main()
  7 {
  8     int a=1, b=2;
  9     OUT;
 10     P("wddv587666");
 11     printf("%d\n",SQR(a+b));
 12     return 0;
 13 }

自定义函数与宏函数的区别:

          函数

         优点

                   缺点

    宏定义函数

节省空间(形参)

浪费时间(编译)没有语法检查,不安全

     普通函数

有语法检查

浪费时间

 

1.指针

指针是变量的一种,里面是一个地址,通过这个地址找到要找的数据。

实质:单元的地址就是指针内容;

 &是取地址的运算符,*是表示指针运算符:

所有类型的指针长度都是4字节;

例如:int a, *pa ;

 pa = &a ;  //把a的地址给pa,都是整型

把一个指针变量的值赋予相同类型的另一个指针变量;

        Int a, *pa = &a, *pb ;  pb = pa;  // 把a的地址给pb;

*有两个含义:定义的时候:表示顶一个指针类型变量;

    使用的时候 :表示取值。

【注】:

(*p1)++, *p1++区别?

(*p1)++是x的内容加1;

*p1++是先求*p1的值(x),然后再p1++,指向下一个元素,不再指向x;

利用指针运算实现库函数strcpy

源代码:

(当涉及到修改实参内存值的时候需要传地址)

  1 #include <stdio.h>
  2 
  3 char *mystrcpy(char *str, char *ptr)
  4 {
  5     char *p = str;
  6     while(*ptr != '\0')
  7     {
  8         *str = *ptr;
  9         str++;
 10         ptr++;
 11     }
 12     *str = '\0';
 13     return p;
 14 }
 15 
 16 
 17 int main()
 18 {
 19     char str[20]="helloworld";
 20     char ptr[20]="world";
 21 
 22     mystrcpy(str,ptr);
 23 
 24     printf("%s\n",str);
 25     return 0;
 26 }

指针与NULL的比较

空指针是对指针变量赋予0值得到的:

#define NULL 0

int  *p=NULL;   空指针

Int *p; 野指针

 

不同类型与零值比较:

1.int

if(n == 0)或者 if (n != 0)

2.float

const float EPSINON = 0.00001;

if ((n >= -EPSINON ) && (n <= EPSINON ))

3.bool类型

if (flag)或者if (!flag)

4.指针类型

if (n == NULL)或者if (n != NULL)

 

指针变量的使用步骤:

1. 定义指针变量;

2.给指针变量赋地址;

3.正常使用指针进行运算;

 

注意:

指针变量未赋值时,可以是任意值,是不能使用的,会造成意外错误。而指针变量给NULL值后,则是可以使用的,只是不指向具体的变量。

3.指针与数组

数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。

 

输出数组的方法主要有下标法和指针法:

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  6     int i, *p = a;
  7     for (i = 0; i < 10; i++)
  8     {
  9         printf("%d ",a[i]);
 10         //printf("%d ",*(a+i));
 11         //printf("%d ",*(p+i));
 12     }
 13     printf("\n");
 14 
 15     char *q = "helloworld";
 16     for (i = 0; i < 10; i++)
 17     {
 18         printf("%c ",q[i]);
 19     }
 20     printf("\n");
 21     return 0;
 22 
 23 }

用指针引用数组元素

C语言规定:

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。

例:

P的初值为&a[0] :

p+i和a+i都是a[i]的地址。

*(p+i)和*(a+i)都是p+i和a+i所指向的数组元素,即a[i].

例如:

*(p+5),   *(a+5)就是a[5].

指向数组的指针变量也可以带下标。p[i]和*(p+i)等价。

4.指针和字符串

在C语言中,存放字符串的方法:

1)用字符数组存放一个字符串,然后输出该字符串。

例如:char a[20]=”I love China!”;

2)用字符串指针指向一个字符串。

例如:char *s="C Language"; (或者分开赋值也行)则表示s是一个指向字符串的指针变量。

3)错误写法:char b[20] ; b="helloworld";

 

这里引出一个指针数组的概念:

 1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     char *string[] = {"I love CHINA","I am","wddv587"};
  6     printf("%s\n",string[0]);
  7     printf("%s\n",string[1]);
  8     printf("%s\n",string[2]);
  9     printf("%p\n",string[0]);
 10     printf("%p\n",string[1]);
 11     printf("%p\n",string[2]);
 12     return 0;
 13 }

指针数组里面的元素全是指针。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值