【C语言day14】
#include<stdio.h>int fun(char* s)
{char* t = s;while (*t++);return(t - s);
}int main() {char s[] = "abc";int n = fun(s);printf("%d\n", n);//4return 0;
}
循环在*t为0时停止,同时t++,t最后会停在字符串结束的’\0’之后的一个位置,t作为尾部指针减去头部指针就是整个字符串占用内存的字节数,包含\0在内
float a[3]={1.5,2.5,3.5},*pa=a;
*(pa++)*=3;
在*pa=a中指针pa指向a[0]
pa++返回值仍是操作之前的值
*(pa++)取pa指向的地址的值
*(pa++)*=3将该值变为原来的3倍
也就是数组a的第一个值为4.5
由于pa++之后pa指针移动了sizeof(float)个字节
所以pa指向a[1]所以值为2.5
#include <stdio.h>int main()
{int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, * p = a + 5, * q = NULL;*q = *(p + 5);printf("%d %d\n", *p, *q);return 0;
}
指针q初始化为NULL,接着又解引用指针q,是错误的,对NULL指针是不能解引用的。
char *p[]={"Shanghai","Beijing","Honkong"};
结果为 j 字符的表达式: *(p[1] +3)
p是个char*类型的数组,p[1]拿到字符串"beijing"的首地址,再加3便是'j'的地址,解地址拿到'j'
#include <stdio.h>int main()
{char* p[] = { "Shanghai","Beijing","Honkong" };printf("%c\n", *p[1]);//Bprintf("%d\n", *p[1] + 3);//66printf("%c\n", *(p[1] + 3));//jreturn 0;
}
不同类型指针一般不可以直接赋值
如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息
指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的位置关系