指针是什么?
指针是变量的一种,所有类型的指针长度都是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。