黑马程序员技术交流社区
标题:
关于指针的问题,求解
[打印本页]
作者:
冰儿
时间:
2015-4-30 22:11
标题:
关于指针的问题,求解
#include <stdio.h>
void test();
int main()
{
int ages[5]={18,46,24,56,22};
test(ages);
return 0;
}
void test(int *array)
{
printf("%d\n",*array);
}
这个函数中,当调用test函数时,是把数组ages的地址传给了指针array,也就是说指针array指向了数组的地址,可是老师在视频中说,指针指向数组的首地址和指向数组是不一样的,不是说数组的地址就是数组元素的首地址吗,难道老师说的是单纯的数组,不是数组的地址吗,详见视频c语言指针第9课27分钟左右,求解答
作者:
LLLX77
时间:
2015-4-30 22:31
是一样的,老师讲错了,要不你把原话发出来看看,你说的这句”指针指向数组的首地址和指向数组是不一样的“,是一样的
作者:
xiniuniu
时间:
2015-5-1 00:26
数组名作为函数参数传递时, 传递的是数组首元素的地址, 类型为数组元素同类型的指针. 这样就可以方便对数组内任一元素进行访问和修改.
数组名, 不作为函数参数时,代表的是整个数组, 虽然数值和数组首元素的地址值相同 ,但表示的意义却并不相同
指针有类型, 而类型是说明指针指向地址处可以访问和操作的内存大小, 如 int arr[5]; arr表示这块内存开始的整体大小
同样指向数组元素的指针和指向数组的指针当然意义也是不一样的
Snip20150501_9.png
(225.34 KB, 下载次数: 16)
下载附件
2015-5-1 00:25 上传
//
#import <Foundation/Foundation.h>
void test(int *pArray)
{
NSLog(@"%p", pArray);
}
int main(int argc, const char * argv[])
{
int arr[5] = {0};
NSLog(@"sizeof(arr) = %ld", sizeof(arr)); // 数组的大小 这里arr代表整个数组
NSLog(@"sizeof(&arr) = %ld", sizeof(&arr)); // 数组首地址的大小
NSLog(@"sizeof(&arr[0]) = %ld", sizeof(&arr[0])); // 数组首元素地址的大小
NSLog(@"%p", &arr); //表示数组开始的地址
NSLog(@"%p", arr); // 表示数组第一个元素的地址
NSLog(@"%p", &arr[0]); // 同上表示数组第一个元素的地址
test(arr); // 同上数组名作参数 传入的是数组第一个元素的地址
int *p = arr; // 指向数组首元素的指针 这里的arr代表首元素的首地址
int (*p2)[5] = &arr; // 指向数组的指针 这里的&arr表示数组的首地址
NSLog(@"p = %p p2 = %p", p, p2);
p += 1; // p = p + sizeof(数组元素类型)*1 ----> p = p + 4
p2 += 1;// p = p + sizeof(数组)*1; -----> p = p + 20
NSLog(@"p = %p p2 = %p", p, p2);
return 0;
}
复制代码
作者:
霸王睡别姬
时间:
2015-5-1 09:41
定义的时候的*和使用时候的*是不一样的,定义的时候仅仅表明它是指针,而用的时候则表示这个指针指向数据的内容
作者:
冰儿
时间:
2015-5-1 10:32
谢谢大家,明白了
作者:
shenxian88
时间:
2015-5-1 11:38
数组元素的首地址,是能够确定这个数组,因为,一个数组里,每一个元素内存都给他分配了地址,只是这些地址都是连续分配的,所以数组的首地址就确定了这个数组内存分配,但是利用数组的首地址取出来的是一个元素,不是一个数组里所有的元素
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2