指针

来源:互联网 发布:正确的鼻呼吸方法知乎 编辑:程序博客网 时间:2024/06/03 19:56

 

1、指针不管定义成什么类型,都是只占用4个字节。每个字节4位!
2、定义完指针后,如果不让其指向某一个变量,就不能直接对其赋值。
3、对一个二维数组a[][];a就代表第0行的行地址。a+1代表第一行的行地址。
 而*a代表取第0行第0列的列地址。
 *(*(a+1)+2)代表第1行第二列所存的值。
4、*降级,&升级
5、定义数组指针:int (*p)[4]
6、打印一个地址:
 int a=100;
 printf("0x%p",&p);
7、二维数组a[][];a[1]相当于a+1;而
8、函数指针不能进行++,--;
9、调用函数指针:ep:
#include<stdio.h>
void max(int a,int b){
 int big=a;
 if(a<b) big=b;
 printf("%d\n",big);
}
void min(int a,int b){
 int small=a;
 if(a>b) small=b;
 printf("%d\n",small);
}
void add(int a,int b){
 printf("%d\n",(a+b));
}
void foo(int x,int y,int(*fuc)(int ,int )){
 fuc(x,y);
}
void main(){
 int a,b;
 printf("please input two num a and b:");
 scanf("%d %d",&a,&b);
 printf("the big num is:");
 foo(a,b,max);
 printf("the small num is:");
 foo(a,b,min);
 printf("the sum is:");
 foo(a,b,add);
}
10、函数指针数组的应用,把多个函数名写到一个指针数组中,以便能够方便调用。
#include<stdio.h>
void func_a(){
 printf("a func\n");
}
void func_b(){
 printf("b func\n");
}
void (*p[2])()={func_a,func_b};
void main(){
 int i;
 for(i=0;i<2;i++){
  p[i]();
 }
}
能否赋值,不能包含不同类型的函数??能否用void来解决这个问题?
11、void类型的指针是一种特别的指针,并不指定他是指向哪种类型的数据,而是根据需要转换为所需数据类型。
int a=0;
folat b=0;
void *p=&a;
void *p=&b;
这样写都是正确的。
char *p或者int *p之类的定义后在之后程序运用到p的时候只能取固定的类型,而用void *p在后来用到它的类型是可以灵活变换 的。
12、char str[]="abc\0def\0ghi",*p=str;
    printf("%s",p+5);
在一个字符串中,只要出现\0,就当做是一个结束符,而且只占用一个字符的内存。用strlen()测试得到的字符串长度也是到第一个'\0'结束。
13、const char *p表示p所指向的内容不能被改变,而char *const p表示p的值不能改变;这两个是不一样的。
原创粉丝点击