- 数组长度
int len = sizeof(arr) / sizeof(arr[0]); //arr[10]10=>len
- 数组名
在sizeof
里表示字节个数
其余情况表示首元素的地址
访问数组元素:下标和指针 - 数组名在做型参时退化成指针
void fun(int *brr)
int arr[10] = {1,2,3,4,5};
arr 为常性值 (arr地址)- 布局函数时 要定义 首元素地址和数组大小
void fun(int *brr, int len)
void Pri(int *arr, int len)
{
if(NULL == arr || len < 1) // 指针判空
{
return;
}
for(int i = 0;i<len; i++)
{
printf("%d ",arr[i]);
}
}
- str3 和 str4 值(地址)相同
"xjrong" 在数据区 而str3 在栈区其指向"xjrong" 的地址
指针变量 只占4字节 用来存放字符串首元素地址
char str1[10] = {"xjrong"}; // 字符串 放到栈帧里 xjrong\0
char str2[10] = {"xjrong"};
const char *str3= "xjrong"; // "xjrong" 在数据区为字符串常量 而str3 在栈区 其指向"xjrong" 的地址
const char *str4= "xjrong"; // 指针 指向 字符串常量 不可被改变
printf"%d \n",(str1 == str2)); // 0 比较地址
printf("%d \n",(str3 == str4)); // 1
- 指针有两个值 1)自身的值 2)解引用(指向)的值
所以const可以封锁两个值 可以分别封锁 也可以一起封锁 - 普通指针 可改变 (待续)
能力收缩兼容性 - 字符串分为:1)常性字符串 (不可改) 2)不常性字符串(可改) [以’\0’结束]//
字符数组 - 把错误放在编译处 不可以放在运行时