对C语言指针的简单理解
程序员文章站
2022-03-11 22:31:36
...
什么是指针?指针就是存放地址的变量;指针也是变量,也有内存地址,其类型长度为4byte(32位)、8byte(64位)。
如何使用?如:
1:指针指向变量;
int main(){
char *p ;//声明一个字符型指针p;
char a = 'b';//声明一个字符型变量a,并赋值为'b';
p = &a;//指针p指向变量a,既p存放了变量a的地址
printf("指针p存放的地址:%ld\n",p);
printf("变量a的地址:%ld\n",&a);
return 0;
}
输出的值都是相同的。
2:指针指向一串字符;
int main(){
char *p = "say you";//双引号申请一段空间存放字符串并返回首地址给指针p,此时p成为指向数组的指针;
if(p == "say you"){
printf("all right");
}
printf("%c\n",*(p+1));//指向数组的指针可以使用*p、*(p+1)访问元素;
return 0;
}
输出的结果为:all right
a
3数组名与指针
int main(){
char a[8];//声明一个长度为8的字符型数组,编译器自动为其分配了8字节的内存空间,数组名a存放分配的空间的首地址;
char *p;//声明一个字符型指针,指针指向0,为空指针。
printf("数组a的地址:%ld\n",a);
pirntf("指针p的地址:%ld\n",p);
return 0;
}
输出结果为:数组a的地址:一个随机分配的内存地址
指针p的地址:0
int main(){
char a[] = "say you";//数组a存放对应的字符
char *p = "say you";//指针p指向字符串“say you”的首地址;
printf("数组a的地址:%ld\n",a);
printf("指针p的地址:%ld\n",p);
printf("字符串的地址:%ld\n","say you");
return 0;
}
输出的结果:数组a的地址为一个随机分配的内存地址,指针p的地址等于字符串"say you"的地址;