C语言指针详解
// 举例说明:
// 代码:
#include<stdio.h>
int main() {
// 定义一个指针变量(没有赋值):
int *p; // '*' 是指针变量的标识符!表明某一变量是指针变量。
// 定义一个整型数组变量:
int array[]= {5,10,15};
// 指针变量的赋值只能用同类型的变量的地址进行赋值:
p=array; // 数组名,就是数组的第一个元素所在的地址! 即array==&array[0]。
printf("已知条件: int *p; array[]= {5,10,15}; p=array;\n\n");
// 输出指针p的地址。
printf("&p \t\t: %d\n",&p);
// 输出指针p所保存的地址,因为指针变量,存储的是某一变量的地址!
printf("p \t\t: %d\n",p);
// 输出数组array的地址。
printf("array \t\t: %d\n",array);
// 输出数组array第一个元素的地址,注意由于array[0]的类型为整型,所以获取地址要加取址符'&'
printf("&array[0] \t: %d\n",&array[0]);
// 输出数组array第二个元素的地址。
printf("&array[1] \t: %d\n",&array[1]);
// 输出指针p所指向的元素的值!'*' 该符号表示获取内存地址中所存储的值!
printf("*p \t\t: %d\n",*p);
// 输出数组array的地址中所保存的值!
printf("*array \t\t: %d\n",*array);
// 输出数组array第二个元素的地址中所保存的值!
printf("*(&array[1]) \t: %d\n",*(&array[1]));
// 输出指针地址自增一后的地址!
printf("++p \t\t: %d\n",++p);
// 输出指针p所指向的元素的值!'*' 该符号表示获取内存地址中所存储的值!
printf("*p \t\t: %d\n",*p); // 由于p中的地址自增一,因此此时p指向数组第二个元素
// 输出指针地址自增一后的地址中所存放的值!
printf("*(++p) \t\t: %d\n",*(++p)); // 先是p是中的地址自增一,然后再是去地址中存放的值
// 输出数组array第三个元素值!
printf("array[2] \t: %d\n",array[2]);
return 0;
}
输出结果: 注意事项:
- 指针地址的类型为长整型,因此有的编译器运行上述代码时,对于"%d"可能会报错,需要改成"%ld"。
- const char *p=“Hello world!” 是可行的,因为常量字符串的赋值给指针变量时,赋值的值其实是字符串变量的首地址,而非字符串变量本身!
- const int *p=5 是不可行的,因为整型变量的赋值,赋值的值本身不是地址,而是整型变量的值!
- 其他注意事项如下图所示:
输出结果:
|