C语言的灵魂-指针

const指针:

int const *p1;
int *const p2 ;
const int * const ;

  • const在 * 的左边:修饰的是指针指向的内存;
    1.指针可以改变指向。
    2.不可以通过指针改变其所指内存的值。
  • const在*号的右边:修饰的是指针变量本身;
    1.指针不可以改变指向。
    2.可以通过指针改变其所指向内存的值。
  • *两边都有const:
    1.指针不可以改变指向。
    2.不可以通过指针改变其所指内存的值。

注意:变量本身仍可以通过变量名去修改。

字符串指针和字符串数组

1.char str[10];
2.char *str1="Beijing";
3.char *str1=str;
第二条语句代表一个char型指针str1指向字符串“Beijing”的首地址;
在这条语句中只能对字符串进行读取,即指针指向字符串常量时,只能访问元素而不能对其中的元素进行改变。因为指针的本质是一个地址,并没有为修改后的数据开辟存放的空间,所以如果要修改元素,则需要定义一个字符数组且为其开辟足够大的内存,使指针指向数组的地址。
如1,2,3条语句所示。

函数和函数指针

  • int (*p)(int a):指向返回值为int,参数值为int a的函数指针。
  • int *p(int a):指向返回值为int,参数值为int a的函数。

二维数组指针访问二维数组

int array[2][3]={{1,2,3},{4,5,6}};
int (*p)[2][3]=NULL;p=&array;

  • p[0][0]=array[0]==*(p[0]+0)
  • p[0][1]=array[1]==*(p[0]+1)
  • p+1:跨过6*4个字节(跨过一整个数组)
  • p[0]+1: 跨过3*4个字节(跨过一行)
  • p[0][0]+1:跨过4个字节(跨过一行中的一个数据元素)

多维指针

  • 二维指针:如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
    int a;
    int *p=&a;
    int **p1=&p;
  • 定义整形变量a
    int a=10;
    int *p=&a;
    int **p1=&p;
    printf("a=%d p=%p p1=%p\n",a,p,p1);
    printf("*p=%d *p1=%p\n",*p,*p1);

数组指针

  • 指向数组的指针
  • 定义方式:类型名称(*指针名)[数组长度]
    例如:
    int a[5]={1,2,3,4,5};
    int(*p)[5]=&a;
  • 定义时不能丢掉括号,因为[ ]优先级比*高,如果丢掉括号,会成为指针数组。
  • 数组指针定义时的数组长度,元素类型 ,必须与指向的数组给出的长度,类型相同。
    int (*p)[5]指向数组长度为5的整形数组的指针。
    char* (*p1)[10]指向数组类型为char*[10]的数组指针。
    int *p2[10]一个数组 类型为int *[10]
  • 数组指针指向的是整个数组,而不是数组元素,所以指针运算p+1,相当于p+1*siaeof(数组名)越过整个数组
  • 访问数组元素的方式:a[0],a,(a+1),(*p)[0],p[0][0],p[0][1]
    int (*p)[5];
    int array[5]={1,2,3,4,5};
    p=&array;

array[0]

  • (array+0)==* array
  • p==array
    p[0]==array
    ( * p)[0]=p[0][0]
    如果通过*(p+1)来访问数组元素时,p+1一定是已经越过了整个数组,出现越界。

指针数组

  • 一组类型相同的有序集合,如果数组元素都是指针变量,就称它为指针数组。
    char* pArray[3]={0};
    char arrChar1[]="how";
    char arrArray2[]="are";
    char * str="you";
    pArray[0]=arrChar1;
    pArray[1]=arrAarray2;
    pArray[2]=str;
    for(int i=0;i<3;i++){
    printf("%s\n",pArr[i]);}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359