C语言指针

1.指针是一个变量;声明一个指针 int *p;p是指针变量,类型是int *,64位系统下所有指针都占8个字节;放地址用的;

int a;

int *p = &a; 把a的地址放到p里边,p是指针变量,类型是int *;p指向a,p是a的地址

*p = 8;//*p表示找到地址为p的这块空间,相当于a=8;

地址是常量,指针是地址的变量;

&6不可以这样,因为6是常量,没有空间,也就没有地址;取地址只能针对变量;


2.指针通常和数组一块使用

#include <stdio.h>

int main (void){

        int a[10];

        int *p = a;//单独的数组名a相当于其第一个元素的地址,及&a[0];数组名是数组手元素的地址;

p = &a; //p是指向数组a的指针在这里,区分下;指针都是占8字节

        *p = 8;//相当于把a[0]=8;

        *(p+1) = 9;//&a[0] == ox?; %a[1] == ox? +4;   *(p+1)就相当于a[1];

    p+i就是每个元素的地址,因为是64位系统下整形,每个地址正好距离4个字节

0x7ffee3a41844

0x7ffee3a41848

0x7ffee3a4184c

0x7ffee3a41850

0x7ffee3a41854

0x7ffee3a41858

0x7ffee3a4185c

0x7ffee3a41860

0x7ffee3a41864

0x7ffee3a41868

}


指针变量加1,其结果相当于加1个其指向的字节数。

int *p = (int *)5;

p++;

p == 9;//因为int占4个字节(32位系统和64位系统),此时p还是指针

printf("%p",p);//不能用%d;指针类型

char *q = (char *)5;

q ++;

q == 6; //因为char占1个字节


const 修饰符:

char a = 'A';

const char *p = &a;  //星前const(char const *p和前边一样)表示p可以改变,*p不可以改变;

char * const p;修饰的是p。p不可以改变

constchar * const p; *p和p都不可以改变

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容