C++ 对数组sizeof 和对数组元素sizeof

这一段程序

下面这段程序很有看点:
//arr1 is an array of ints
int *source=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);//number of elements
int *dest=new int[sz];
while(source!=arr1+sz)
    *dest++=*source++;//copy element and increment pointers

1.source是一个指向数组arr1的第一个元素的指针.(开始时,*source与*arr1的值是一样的.)

2.sizeof操作符的作用是返回一个对象或类型名的长度,返回值类型为size_t,长度的单位是字节.

3.对数组做sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数.因为sizeof返回整个数组在内存中的存储长度.

4.sizeof(*arr1),对指针arr1做sizeof操作,返回arr1所指的数组的第一个int型元素的类型长度.在这里,下面三种写法是等效的:

sizeof(*arr1)=sizeof(*source)=sizeof(int)

5.source!=arr+sz,这里是在比较地址(没有解引用),这里的数组名arr就自动转化成了指向数组第一个元素的指针,加几就指向其后面的第几个元素.

6.比较sizeof(arr1)和sizeof(*arr1).arr1不解引用做sizeof操作,编译器能判断出来这就是一个普通的指针还是一个数组名指针,如果这是个数组名,就返回整个数组在内存中的存储长度,否则就返回存放指针所需的内存大小,比如指针p里存放的地址是0x22ff50,那么存放这个地址需要4字节,则sizeof(p)返回4.而对于*arr1,这里arr1只是一个普通的指针.

-------------------------------

猜想

继续研究上面的第六点,写了这样一段测试程序:

    char a[7]={'1','2','3','4','5','6','7'};
    char *b=&a[0];
    char *c=a;
    cout<<sizeof(a)<<endl;
    cout<<sizeof(a+2)<<endl;
    cout<<sizeof(b)<<endl;
    cout<<sizeof(c)<<endl;

输出的结果为:

7

4

4

4

那么,我想,或许真有数组名指针这种东西,也就是说指针a上可能有某种记号表明它是一个数组名,这种标志是数组创建的时候产生的,另一种可能就是指针a和7个数组元素存放的地址存在某种特殊联系.

转载于:https://www.cnblogs.com/qiri07/p/4812961.html

C++中,你可以使用标准库中的`sort`函数来对数组进行排序操作。`sort`函数定义在`<algorithm>`头文件中,它使用快速排序算法(通常情况下)来对元素进行排序。下面是使用`sort`函数对数组进行排序的一个基本示例: ```cpp #include <iostream> #include <algorithm> // 包含sort函数 int main() { int arr[] = {5, 3, 8, 4, 2}; int n = sizeof(arr)/sizeof(arr[0]); // 获取数组元素的数量 // 对数组进行排序 std::sort(arr, arr + n); // 输出排序后的数组 for (int i = 0; i < n; ++i) { std::cout << arr[i] << " "; } std::cout << std::endl; return 0; } ``` 在上面的代码中,`std::sort`函数接受两个参数,分别是数组的开始迭代器和结束迭代器,表示要排序的数组范围。在这个例子中,`arr`是数组的开始地址,`arr + n`是数组结束的地址加一(因为迭代器是不包括结束地址的)。 除了使用标准的`sort`函数外,你还可以使用自定义的比较函数来改变排序的顺序: ```cpp #include <iostream> #include <algorithm> bool compare(int a, int b) { return a > b; // 降序排序 } int main() { int arr[] = {5, 3, 8, 4, 2}; int n = sizeof(arr)/sizeof(arr[0]); // 使用自定义比较函数进行降序排序 std::sort(arr, arr + n, compare); // 输出排序后的数组 for (int i = 0; i < n; ++i) { std::cout << arr[i] << " "; } std::cout << std::endl; return 0; } ``` 在这个例子中,`compare`函数定义了数组排序的顺序。`std::sort`使用这个函数来比较数组中的元素,并根据返回值`true`或`false`来决定元素的顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值