1,指针是一种类型;
2,指针是一个内存地址;
int a = 10;
int* p;
p = &a;
p指向了a变量的指针,*p表示的是这个指针指向的值,也就是a;如果直接printf p,那么会打印出a对应的内存地址,如果printf *p,那么会打印出a的值,就是10。
指针的指针 如:int** pp,那么指针的指针只能指向指针的指针,不能指向指针,如:
pp = &p; 是正确的,但是
pp = &a; 是不正确的。
数组名是一个指针:
#include<stdio.h>
int main(){
int a[3] = {1,2,3};
nclude<stdio.h>
int main(){
int a[3] = {1,2,3};
int* p = a;
printf("a[0] is : %d , p is %d \n",a[0],*p);
return 0;
}
int* p = a;
printf("a[0] is : %d , p is %d \n",a[0],*p);
return 0;
}
注意:
int* p = a;
这里如果是 &a 会有错误提示,因为a本来就是一个指针,所以不用加&。
在linux下用gcc编译的命令是 gcc -o 编译后文件名 待编译的源文件名
比如:
gcc -o sample sample.c
编译完成后直接执行文件: ./sample
如果不加编译后文件名参数,则默认的编译完成的程序文件是:a.out
如:
gcc sample.c
执行则用:
./a.out