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