C语言中指针的初步认知

指针是什么?

指针是变量的一种,所有类型的指针长度都是4个字节。

&是取地址运算符,*是指针运算符。

 所以:&a === 0x100
0x100 0x101 0x102 0x103
 

                                                                                      a     

int  *p = &a;     此时p是指针,用来保存地址0x100.(p = &a )。

访问的两种模式:1、a = 100,通过变量名访问。2、*p = 100,通过地址来访问内存。

*的两种含义:

1、定义的时候:表示后面的变量是一个指针。

2、使用的时候,表示取值。 

指针和变量:

例题:

int x = 3,y = 0, *px = &x;

y = *px + 5;   ----输出8
y = ++*px;     ----输出4
y = *px++;     ----输出4

思考:(*p1)++与*p1++的区别?

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

#define NULL 0

int  *p=NULL;  // 空指针

p为指针变量,p=NULL表示空指针,不指向任何变量。P !=NULL表示p不是空指针。

不同类型和零值的比较:

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

float const float EPSINON = 0.00001; if ((n >= -EPSINON ) && (n <= EPSINON ))

bool类型 if (flag)或者if (!flag)   (一般在c++中使用!)

指针类型 if (n == NULL)或者if (n != NULL)

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

#include<stdio.h>
 
char *mystrcpy(char *str, const char *ptr)
{
    char *tmp = str;
 
    while((*str++ = *ptr++) != '\0');// 先执行*str = *ptr 再++;
 
    return tmp;//返回值
}
 
int main()
{
    char str[20] = "helloworld";
    char ptr[20] = "world";
 
    mystrcpy(str, ptr);
 
    printf("%s\n", str);
     return 0;
}

指针变量的使用步骤:

1. 定义指针变量;

2.给指针变量赋地址;

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

指针和数组:

char a[20];int *p = a;

下标法:用a[i]来表示; printf(“%d”, a[i])

指针法:用*(a+i),*(p+i)表示  printf("%d", *(a+1))  /  printf("%d",*(p+1));

例题:

int a[5] = {1, 2, 3, 4, 5};

int *p1 = (int*)(&a + 1);

int *p2 = (int*)((int)a + 1);

int *p3 = (int*)(a + 1);

p1[0], p2[0], p3[0]的值分别为多少? 

输出结果:垃圾值 、垃圾值、2

指针和字符串:

main() 
{
    char *string[]={”I love China!”,”I am ”};    
    printf("%s\n",string); 
} 

输出结果:乱码
改为printf("%s\n", string[0]);即可正常输出。

char *s="C Language"; 则表示s是一个指向字符串的指针变量。 把字符串的首地址赋予s。

猜你喜欢

转载自blog.csdn.net/wow66lfy/article/details/81208749
今日推荐